Skip to main content
SamBirch
Participating Frequently
July 19, 2019
Answered

Add different Section Prefix and same page number to independent pages in Spread

  • July 19, 2019
  • 1 reply
  • 1744 views

Hi,

First post here, so still trying to wrap my head around the way javascript interacts with inDesign.

Basically I wanted to write a script that if I select a spread then it adds a prefix to each of the pages sequentially *the actual defined prefix e.g. 'P' bit can remain in the code*

And then brings up a pop up that lets you choose the page number to apply after all those prefixes i.e. '3'

Is this possible?

Thanks Sam

In this example I would like to be able to tell it rename the currently selected spread —which was duplicated from above—to 'S3, P3, N3'

This topic has been closed for replies.
Correct answer daitranthanhoa

In spite of uploading your code somewhere far, it is better you put it on forum only.

Because he is not the only person to use it.

Lot of other people for seeking such code and needs explanation of what you did.

it is better you copy your code here itself.


#target indesign

if(app.documents.length>0)

{

var dlg = new Window('dialog', "Add Section Name"); 

 

dlg.panel = dlg.add('panel', undefined, ""); 

dlg.panel.alignChildren = "fill"; 

dlg.title1 = dlg.panel.add('statictext', undefined, "Prefix");

dlg.prefix = dlg.panel.add('edittext', undefined, "S"); 

dlg.title2 = dlg.panel.add('statictext', undefined, "Start Page");

dlg.startpage = dlg.panel.add('edittext', undefined, "1"); 

dlg.title3= dlg.panel.add('statictext', undefined, "Current Page");

dlg.pageno = dlg.panel.add('edittext', undefined, "1");   

var btnOk = dlg.add("button", undefined, "OK"); 

var btnClose = dlg.add("button", undefined, "Cancel");

var doc=app.activeDocument;

  btnOk.onClick = function(){ 

        dlg.close (12345);   

}  

try

{

     dlg.pageno.text=app.activeWindow .activePage.documentOffset +1 ;

     dlg.startpage.text=app.activeWindow .activePage.parent.index+1;

}

catch(e)

{

    dlg.pageno.text=1;

}

  btnClose.onClick = function(){ 

        dlg.close (); 

    } 

if(dlg.show() == 12345) {

   

       var prefix=dlg.prefix.text;

      var startPage=Number(dlg.startpage.text);

      var currentPage=Number(dlg.pageno.text);

      var arr=prefix.split(",");

      var   oSection;

      var secId=0;

      //Delete old section in spread

      for (var i=0;i<doc.pages[currentPage-1 ].parent.pages.length;i++)

      {

           if(currentPage-1 + i  >0)

              secId=doc.pages[currentPage-2+ i ].appliedSection.id ;

           if(doc.pages[currentPage-1 ].parent.pages.documentOffset+1>currentPage &&  doc.pages[currentPage-1 ].parent.pages.appliedSection.id !=secId)

              doc.pages[currentPage-1 ].parent.pages.appliedSection.remove();

       }

      //Add new section

      for (var i=0;i<arr.length;i++)

      {

           if(currentPage-1 + i  >0)

              secId=doc.pages[currentPage-2+ i ].appliedSection.id ;

           if(doc.pages[currentPage-1 + i ].appliedSection.id !=secId)

           {

               oSection=doc.pages[currentPage-1 + i ].appliedSection

                oSection.sectionPrefix = arr;

               // oSection.pageStart =;

                oSection.continueNumbering = false;

                oSection.pageNumberStart = startPage;

            }

           else

           {

                oSection = doc.sections.add( );

                oSection.sectionPrefix = arr;

                oSection.pageStart =doc.pages[currentPage-1 + i ];

                oSection.continueNumbering = false;

                oSection.pageNumberStart = startPage;

           }     

         

      }

  }

}

You can use  above script to set page name for each Spreads.

With your example:

Spread 1: input prefix= S,P,N ; start page =1; current page =1.

Spread 2: input prefix=S,P,N ; start page =2; current page =4.

If you dupplicate new spread, you can set the same.

you can double to first page of each spreads before run script,

It will auto get [start page] and [current page] for you

1 reply

Sunil Yadav
Legend
July 19, 2019

First Understand the concept of adding or getting section here : https://www.indesignjs.de/extendscriptAPI/indesign-latest/#Section.html​ ,

For your reference: Rename every page to a text field that page ,

And here is the code you can try or modify accordingly:

var myDoc = app.documents[0];

var myPageNumber = 1;

var pages = myDoc.pages;

var myPrefix = ["S","P","N"];

var preFixConuter = 0;

for(var i = 0; i < pages.length; i++){

    try{

        var sec = myDoc.sections.add(pages);

        }

    catch(e){

        var sec = pages.appliedSection;

        }

    sec.continueNumbering = false;

    sec.pageNumberStart = myPageNumber;

    sec.sectionPrefix = myPrefix[preFixConuter];

    if(preFixConuter < 2){

        preFixConuter++;

        }

    else if(preFixConuter == 2){

        myPageNumber++;

        preFixConuter = 0;

        }

    }

As far as your pages from spread is concerned, you can check this out:

var myDoc = app.documents[0];

var spreads = myDoc.spreads;

var myPrefix = ["S","P","N"];

for(var i = 0; i < spreads.length; i++){

    for(var j = 0; j < spreads.pages.length; j++){

        try{

            var sec = myDoc.sections.add(spreads.pages);

            }

        catch(e){

            var sec = spreads.pages.appliedSection;

            }

        sec.continueNumbering = false;

        sec.pageNumberStart = parseInt(j+1);

        sec.sectionPrefix = myPrefix;

        }

    }

Best

Sunil

SamBirch
SamBirchAuthor
Participating Frequently
July 19, 2019

Thanks Sunil! Will check it all out.

daitranthanhoa
daitranthanhoaCorrect answer
Inspiring
July 19, 2019

In spite of uploading your code somewhere far, it is better you put it on forum only.

Because he is not the only person to use it.

Lot of other people for seeking such code and needs explanation of what you did.

it is better you copy your code here itself.


#target indesign

if(app.documents.length>0)

{

var dlg = new Window('dialog', "Add Section Name"); 

 

dlg.panel = dlg.add('panel', undefined, ""); 

dlg.panel.alignChildren = "fill"; 

dlg.title1 = dlg.panel.add('statictext', undefined, "Prefix");

dlg.prefix = dlg.panel.add('edittext', undefined, "S"); 

dlg.title2 = dlg.panel.add('statictext', undefined, "Start Page");

dlg.startpage = dlg.panel.add('edittext', undefined, "1"); 

dlg.title3= dlg.panel.add('statictext', undefined, "Current Page");

dlg.pageno = dlg.panel.add('edittext', undefined, "1");   

var btnOk = dlg.add("button", undefined, "OK"); 

var btnClose = dlg.add("button", undefined, "Cancel");

var doc=app.activeDocument;

  btnOk.onClick = function(){ 

        dlg.close (12345);   

}  

try

{

     dlg.pageno.text=app.activeWindow .activePage.documentOffset +1 ;

     dlg.startpage.text=app.activeWindow .activePage.parent.index+1;

}

catch(e)

{

    dlg.pageno.text=1;

}

  btnClose.onClick = function(){ 

        dlg.close (); 

    } 

if(dlg.show() == 12345) {

   

       var prefix=dlg.prefix.text;

      var startPage=Number(dlg.startpage.text);

      var currentPage=Number(dlg.pageno.text);

      var arr=prefix.split(",");

      var   oSection;

      var secId=0;

      //Delete old section in spread

      for (var i=0;i<doc.pages[currentPage-1 ].parent.pages.length;i++)

      {

           if(currentPage-1 + i  >0)

              secId=doc.pages[currentPage-2+ i ].appliedSection.id ;

           if(doc.pages[currentPage-1 ].parent.pages.documentOffset+1>currentPage &&  doc.pages[currentPage-1 ].parent.pages.appliedSection.id !=secId)

              doc.pages[currentPage-1 ].parent.pages.appliedSection.remove();

       }

      //Add new section

      for (var i=0;i<arr.length;i++)

      {

           if(currentPage-1 + i  >0)

              secId=doc.pages[currentPage-2+ i ].appliedSection.id ;

           if(doc.pages[currentPage-1 + i ].appliedSection.id !=secId)

           {

               oSection=doc.pages[currentPage-1 + i ].appliedSection

                oSection.sectionPrefix = arr;

               // oSection.pageStart =;

                oSection.continueNumbering = false;

                oSection.pageNumberStart = startPage;

            }

           else

           {

                oSection = doc.sections.add( );

                oSection.sectionPrefix = arr;

                oSection.pageStart =doc.pages[currentPage-1 + i ];

                oSection.continueNumbering = false;

                oSection.pageNumberStart = startPage;

           }     

         

      }

  }

}

You can use  above script to set page name for each Spreads.

With your example:

Spread 1: input prefix= S,P,N ; start page =1; current page =1.

Spread 2: input prefix=S,P,N ; start page =2; current page =4.

If you dupplicate new spread, you can set the same.

you can double to first page of each spreads before run script,

It will auto get [start page] and [current page] for you