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:

the new document:

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
Post a Comment