Skip to main content
Inspiring
November 20, 2014
Answered

Get the index of the current page?

  • November 20, 2014
  • 3 replies
  • 3696 views

Hello, I can't figure out, how to get the index of the active Page in a document. I can't use "activePage.name", as the name can not show the actual number of the current page. In the forums I found the following function to get javascripts indexOf() function.

if (!Array.prototype.indexOf) { 

    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {   

        "use strict"; 

        if (this == null) { 

            throw new TypeError(); 

        } 

        var t = Object(this); 

        var len = t.length >>> 0; 

        if (len === 0) { 

            return -1; 

        } 

        var n = 0; 

        if (arguments.length > 0) { 

            n = Number(arguments[1]); 

            if (n != n) { // shortcut for verifying if it's NaN 

                n = 0; 

            } else if (n != 0 && n != Infinity && n != -Infinity) { 

                n = (n > 0 || -1) * Math.floor(Math.abs(n)); 

            } 

        } 

        if (n >= len) { 

            return -1; 

        } 

        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); 

        for (; k < len; k++) { 

            if (k in t && t === searchElement) { 

                return k; 

            } 

        } 

        return -1; 

    } 

With this I wrote then the following code:

var myDocument = app.activeDocument;

var myPages = myDocument.pages;

var number = myPages.indexOf(myDocument.layoutWindows[0].activePage);

It sadly doesn't work. When I alert "myPages" I can see, that I get the pages object. Can I know somehow get just the array with the values of this?

Thank you in advance!! Appreciate any help!

This topic has been closed for replies.
Correct answer Peter Kahrel

app.activeWindow[0].activePage.documentOffset

Of course, documentOffset, not index. Thanks for noticing that.

3 replies

Inspiring
November 21, 2014

Is it definitely the index that you want? That returns the index of the page within the containing object, which is the Spread, so it's usually just 0 or 1.

If you actually want the number of the page within the document (disregarding section pagination options) you want documentOffset. So, you could use

app.activeWindow[0].activePage.documentOffset.

If you have a 10 page document with two roman-numeral pages and then numbered pages restarting at 1 (i, ii, 1, 2, 3, 4, 5, 6, 7, 8), that will give you a value of 1 for the first page and 10 for the last (as opposed to .name which gives 'i' for the first and '8' for the last).

Peter Kahrel
Community Expert
Peter KahrelCommunity ExpertCorrect answer
Community Expert
November 21, 2014

app.activeWindow[0].activePage.documentOffset

Of course, documentOffset, not index. Thanks for noticing that.

StammAuthor
Inspiring
November 24, 2014

Hey, thank you really much!!! Don't know how I could not find this solution .

Peter Kahrel
Community Expert
Community Expert
November 21, 2014

Anyway, in answer to the OP's question : )

This returns the active page's index:

app.windows[0].activePage.index

Peter

Harbs.
Legend
November 21, 2014

You are confusing arrays and collections Document.pages is a collection. If you want to resolve that into an array, you need myCollection.getElements(). In your case that would be myDocument.pages.getElements();

I usually use a convenience function to get items as an array when I want to work with arrays:

It also returns a copy of the array if an array is provided:

AsArray = function (collection){

  if(collection instanceof Array){return collection.slice()}

  return collection.everyItem().getElements().slice();

}

(The slice on the collection is to improve performance in older versions of InDesign...)

StammAuthor
Inspiring
November 24, 2014

Hey, thanks for the help, I think Peters solution is a bit quicker here