Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Get the index of the current page?

Participant ,
Nov 20, 2014 Nov 20, 2014

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!

TOPICS
Scripting
3.6K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Nov 21, 2014 Nov 21, 2014

app.activeWindow[0].activePage.documentOffset

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

Translate
LEGEND ,
Nov 21, 2014 Nov 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...)

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 24, 2014 Nov 24, 2014

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

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 21, 2014 Nov 21, 2014

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

This returns the active page's index:

app.windows[0].activePage.index

Peter

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 21, 2014 Nov 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).

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 21, 2014 Nov 21, 2014

app.activeWindow[0].activePage.documentOffset

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

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 24, 2014 Nov 24, 2014

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

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
May 12, 2019 May 12, 2019

And without the "[0]", it finally works correctly, like this:

app.activeWindow.activePage.documentOffset

To get the "nth" page in the document, I use, hence:

var myPage = Number(app.activeWindow.activePage.documentOffset) + 1;

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
May 12, 2019 May 12, 2019
LATEST

Ah, yes, I mixed up app.activeWindow and app.windows[0].

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Nov 24, 2014 Nov 24, 2014

Correct, but the first page starts at 0, not 1:

alert (app.activeDocument.pages[0].documentOffset);

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Nov 24, 2014 Nov 24, 2014

That's true. It's actually quite handy for what I am doing, as I am using the active Page value in an array for xml elements. So for example site[activePage] is doing the right effect for me, as before I had to do 'index = activePage - 1;' . For most other purposes, you would of course have to use app.activeDocument.pages[0].documentOffset +1

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines