How can I create a new document out of a subset of another document's pages (in InDesign (CS6) using ExtendScript)? -


i need offer feature allows indesign users select page range in indesign document , create new document out of pages. sounds simple, isn't...

i have tried many different ways of doing have failed degree. methods put pages in single spread (which makes indesign crash). best i've been able (see code below) still has problems @ beginning , end (see screenshots below):

the original document:

overview of original document. middle removed (red lines).

the new document:

overview of new document. middle removed (red lines).

the question: how can create new document out of subset of document's pages (in indesign using extendscript) without having problems shown in screenshots?

note: behavior of script quite different in cs5.5 , cs6. question concerns cs6.


the second screenshot obtained applying following code document shown in first screenshot:

code

var firstpagename = { editcontents: "117" };  // page number entered user in integereditbox var lastpagename = { editcontents: "136" };  // page number entered user in integereditbox var sourcedocument = app.activedocument; var destdocument = app.documents.add(); destdocument.importstyles(importformat.paragraphstylesformat, new file(sourcedocument.filepath + "/" + sourcedocument.name), globalclashresolutionstrategy.load_all_with_overwrite); destdocument.importstyles(importformat.characterstylesformat, new file(sourcedocument.filepath + "/" + sourcedocument.name), globalclashresolutionstrategy.load_all_with_overwrite); destdocument.viewpreferences.horizontalmeasurementunits = sourcedocument.viewpreferences.horizontalmeasurementunits; destdocument.viewpreferences.verticalmeasurementunits = sourcedocument.viewpreferences.verticalmeasurementunits; destdocument.documentpreferences.facingpages = sourcedocument.documentpreferences.facingpages; destdocument.documentpreferences.pageheight = sourcedocument.documentpreferences.pageheight; destdocument.documentpreferences.pagewidth = sourcedocument.documentpreferences.pagewidth; destdocument.documentpreferences.pagesize = sourcedocument.documentpreferences.pagesize; var sourcespreads = sourcedocument.spreads; var nbsourcespreads = sourcespreads.length; var firstpagefound = false; var lastpagefound = false; var i; var newspreadneeded; var currentdestspread;  (i = 0; !lastpagefound, < nbsourcespreads; ++i) {   newspreadneeded = true;   var sourcepages = sourcespreads[i].pages;   var nbsourcepages = sourcepages.length;   var j;   (j = 0; !lastpagefound, j < nbsourcepages; ++j) {     if (sourcepages[j].name === firstpagename.editcontents) {       firstpagefound = true;       destdocument.documentpreferences.startpagenumber = parseint(firstpagename.editcontents);  // want preserve page numbers     }     if (firstpagefound) {       // copy page on new document.       var firstinnewspread = false;       if (newspreadneeded) {         currentdestspread = destdocument.spreads.add();         newspreadneeded = false;         firstinnewspread = true;       }       var newpage = sourcepages[j].duplicate(locationoptions.at_end, currentdestspread);       var k;       (k = 0; k < newpage.index; ++k) {         currentdestspread.pages[k].remove();       }     }     if (sourcepages[j].name === lastpagename.editcontents) {       lastpagefound = true;     }   } } destdocument.spreads[0].remove(); 

i hacking around , came little script. although approaches problem opposite direction, seems work fine here. also, i'm still running in indesign cs5, maybe work you. got gist of question?

this extract pages 3 through 5 separate document:

var doc = app.activedocument;  var newfilepath = doc.filepath + "/subset_" + doc.name; var newfile = file(newfilepath); // create new file path  doc.saveacopy(newfile); // save copy of doc var newdoc = app.open(newfile); // open copy  var firstpagenum = 3; // first page number in range var lastpagenum = 5;  // last page number in range  var firstpage = newdoc.pages[firstpagenum-1]; var lastpage = newdoc.pages[lastpagenum-1];  // remove text last page in range end of document var lastpageframes = lastpage.textframes.everyitem().getelements(); (var i=0; < lastpageframes.length; i++) {    var frame = lastpageframes[i];    var parentstory = frame.parentstory;    var lastframeinsert = frame.insertionpoints.lastitem();    var laststoryinsert = parentstory.insertionpoints.lastitem();    var textafter = parentstory.insertionpoints.itembyrange(lastframeinsert,laststoryinsert);    textafter.remove(); };  // remove text beginning of document first page in range var firstpageframes = firstpage.textframes.everyitem().getelements(); (var i=0; < firstpageframes.length; i++) {    var frame = firstpageframes[i];    var parentstory = frame.parentstory;    var firstframeinsert = frame.insertionpoints.firstitem();    var textbefore = parentstory.insertionpoints.itembyrange(0,firstframeinsert.index);    textbefore.remove(); };  // remove pages aren't in range var allpages = newdoc.pages.everyitem().getelements(); (var i=0; < allpages.length; i++) {    var page = allpages[i];    if (i < firstpagenum || > lastpagenum) {       page.remove();    } }; 

Comments

Popular posts from this blog

java - Play! framework 2.0: How to display multiple image? -

gmail - Is there any documentation for read-only access to the Google Contacts API? -

php - Controller/JToolBar not working in Joomla 2.5 -