CreativePro Forum
Join our community of graphic designers, publishers, and production artists from around the world. Our members-only forum is a great place to discuss challenges and find solutions!
- You must be logged in to reply to this topic.Login
package for output – single pages, from a multi page document
- This topic has 25 replies, 12 voices, and was last updated 5 years, 1 month ago by
Solomon Antonell.
-
AuthorPosts
-
-
May 15, 2016 at 6:11 pm #84909
Julie Fairless
MemberI’ve been given a multiple page document – it’s actually a book chapter. Each page in the chapter is a self contained unit of images and text.
I want to collect for output each page individually. – so each page from the chapter has it’s own folder with all images and text/indesign file
Has anyone been able to do this directly from package?
I’ve come up with a number of rather convoluted ways of duplicating and re saving each page individually – but can’t help thinking there must be an easier way
thanks julie
-
May 16, 2016 at 4:08 am #84932
Ari Singer
MemberThis can definitely be done with a script. If I’ll have some extra time on my hands I’ll try to create something.
-
May 16, 2016 at 9:02 am #84937
Ari Singer
MemberHere you go, I’ve written this script for you. With the document that you want to package individually open, run this script. If it’s a large file it might take a few minutes because it basically makes a new document from every page, packages it, and deletes the temporary document. When done you’ll find a folder on your desktop with the name of your file, in it every page will have its own subfolder, with its files, images and fonts.
If you don’t know how to save and run this script, look here: https://creativepro.com/how-to-install-a-script-in-indesign-that-you-found-in-a-forum-or-blog-post.php
Following is the script:
//created by Ari S. -- designerjoe@outlook.com // Package every page individually app.scriptPreferences.enableRedraw = false; var myDoc = app.activeDocument; var sourceTitle = myDoc.name; var myPages = myDoc.pages; for (i=0; i <myPages.length; i++){ var currentSourcePage = myPages[i]; if (currentSourcePage.pageItems.length==0) continue; var pageName = currentSourcePage.name; var sourceWidth = myDoc.documentPreferences.pageWidth; var sourceHeight = myDoc.documentPreferences.pageHeight; var sourceMaster = currentSourcePage.appliedMaster; var myNewDoc = app.documents.add(); myNewDoc.documentPreferences.pageWidth = sourceWidth; myNewDoc.documentPreferences.pageHeight = sourceHeight; var myNewPage = myNewDoc.pages[0]; currentSourcePage.duplicate(undefined, myNewPage); var newMaster = sourceMaster.duplicate(undefined, myNewDoc); var myNewPagesArray = myNewDoc.pages; for (j=myNewPagesArray.length - 1; j >=0; j--){ if (myNewPagesArray[j].pageItems.length==0){ myNewPagesArray[j].remove(); } } myNewDoc.pages[0].appliedMaster = newMaster; if (currentSourcePage.side == PageSideOptions.leftHand){ myNewDoc.documentPreferences.startPageNumber = 2; } createPackage(myNewDoc); } function createPackage(myNewDoc) { var targetFolder = new File("~/Desktop/" + sourceTitle +"/Page " + pageName + "/"); var flag = Folder(targetFolder).create(); // ------- HERE YOU CAN CHANGE ANY PACKAGING SETTING THAT YOU WANT. TRUE means 'ON', and FALSE means 'OFF': --------- var copyingFonts = true; var copyingLinkedGraphics = true; var copyingProfiles = true; var updatingGraphics = true; var includingHiddenLayers = true; var ignorePreflightErrors = true; var creatingReport = true; var includeIDML = true; var includePDF = false; var pdfStyle = ""; var forceSave = true; var versionComments = sourceTitle + " " + "page " + pageName ; if ( flag === true){ myName = "Page " + pageName; var garbageFolder = new File("~/Desktop/" + sourceTitle +"/Delete This Folder/"); Folder(garbageFolder).create(); myNewDoc.save(new File("~/Desktop/" + sourceTitle + "/Delete This Folder/" + myName + ".indd")) myNewDoc.packageForPrint ( targetFolder, copyingFonts, copyingLinkedGraphics, copyingProfiles, updatingGraphics, includingHiddenLayers, ignorePreflightErrors, creatingReport, includeIDML, includePDF, pdfStyle, versionComments, forceSave ); myNewDoc.close(SaveOptions.no); var myTempFiles = Folder(garbageFolder).getFiles(); for (k=myTempFiles.length-1; k >=0; k--) myTempFiles[k].remove(); Folder(garbageFolder).remove(); } }
Please let me know if it works.
P.S. If you want to change any packaging settings (for ex. if you want to export an .idml as well) go to the lines below the line that says “Here you can change any packaging settings…”, and turn on or off any setting by setting it to true (on) or false (off) respectively.
-
May 16, 2016 at 3:06 pm #84946
Julie Fairless
MemberThanks Chap – will have a look at running the script and let you know how it works. :)
-
July 1, 2016 at 7:58 am #86193
Wil Buchanan
MemberHey Ari, that script is brilliant!
Is there a way to customize the script for different page ranges? So instead of packaging just one page at a time, maybe package 2 pages…or 8 pages?
Thanks
-
July 1, 2016 at 8:46 am #86194
Ari Singer
MemberIt can be done, but is it bit more complicated, I think. I’ll try to write something if I have a chance.
-
July 3, 2016 at 3:46 pm #86218
Julie Fairless
Memberhey Ari, thanks for your efforts – its amazing!!
-
July 3, 2016 at 10:05 pm #86225
Ari Singer
Member//created by Ari S. -- designerjoe@outlook.com // Package entire document individually by the amount of pages at a time that you want app.scriptPreferences.enableRedraw = false; var srcDoc = app.activeDocument; var srcTitle = srcDoc.name; var srcPages = srcDoc.pages; var pgLength = srcPages.length; var srcW = srcDoc.documentPreferences.pageWidth; var srcH = srcDoc.documentPreferences.pageHeight; var srcPgLength = srcPages.length; var start = 0; var range, end, newDocName, isEnd, fileName; // ------- HERE YOU CAN CHANGE ANY PACKAGING SETTING THAT YOU WANT. TRUE means 'ON', and FALSE means 'OFF': --------- var copyingFonts = true; var copyingLinkedGraphics = true; var copyingProfiles = true; var updatingGraphics = true; var includingHiddenLayers = true; var ignorePreflightErrors = true; var creatingReport = true; var includeIDML = true; var includePDF = false; var pdfStyle = ""; var forceSave = true; var myDialog = app.dialogs.add({name:"Package Export Range", canCancel:true}); with (myDialog) { with(dialogColumns.add()) { with(dialogRows.add()) { staticTexts.add ({staticLabel:"Enter the amount of pages you want to package at a time"}); with(dialogRows.add()) { var myRangeBox = integerEditboxes.add({editValue:1}); } } } } if (myDialog.show() == true) { range = myRangeBox.editValue; if (range == 0) { alert("0 is not a range!..."); myDialog.destroy(); exit(); } else if (range > pgLength) { alert("Range can't be more than the amount of pages"); myDialog.destroy(); exit(); } run(); } else { myDialog.destroy(); exit(); } function run() { while (!isEnd) { var newDoc = app.documents.add({pageWidth: srcW, pageHeight: srcH}); newDoc.masterSpreads[0].baseName = "garbage_master"; end = start + range; if (end >= srcPages.length) { end = srcPages.length; isEnd = true; } var firstPage = srcPages[start]; var lastPage = srcPages[end - 1]; for (var j = start; j < end; j++) { var srcPage = srcPages[j]; if (srcPage.pageItems.length == 0) continue; var newPage = newDoc.pages.add(); srcPage.duplicate(undefined, newPage); srcMaster = srcPage.appliedMaster; var newMaster; try { newMaster = newDoc.masterSpreads.item(srcMaster.name); newMaster.name; } catch (myError) { newMaster = srcMaster.duplicate(undefined, newDoc); } newPage.appliedMaster = newMaster; } for (var k = newDoc.pages.length -1; k >=0; k--) { if (newDoc.pages[k].pageItems.length == 0){ try { newDoc.pages[k].remove(); } catch (myError){}; } } newDoc.masterSpreads[0].remove(); if (firstPage.side === PageSideOptions.LEFT_HAND) { newDoc.documentPreferences.startPageNumber = 2 } if (newDoc.pages.length == 1) { fileName = "Page " + firstPage.name; } else { fileName = "Pages " + firstPage.name + " - " + lastPage.name; } createPackage(newDoc); start += range; if (start == srcPages.length) { isEnd = true; } } } function createPackage(myNewDoc) { var targetFolder = new File("~/Desktop/" + srcTitle +"/" + fileName + "/"); var flag = Folder(targetFolder).create(); var versionComments = srcTitle + " " + fileName; if ( flag === true){ var garbageFolder = new File("~/Desktop/" + srcTitle +"/Delete This Folder/"); Folder(garbageFolder).create(); myNewDoc.save(new File("~/Desktop/" + srcTitle + "/Delete This Folder/" + fileName + ".indd")) myNewDoc.packageForPrint ( targetFolder, copyingFonts, copyingLinkedGraphics, copyingProfiles, updatingGraphics, includingHiddenLayers, ignorePreflightErrors, creatingReport, includeIDML, includePDF, pdfStyle, versionComments, forceSave); myNewDoc.close(SaveOptions.no); var myTempFiles = Folder(garbageFolder).getFiles(); for (l = myTempFiles.length - 1; l >= 0; l--) { myTempFiles[l].remove(); Folder(garbageFolder).remove(); } } }
-
July 3, 2016 at 10:16 pm #86231
Ari Singer
MemberThe script has one drawback, though: empty pages do not get packaged. To some this might be a deal-breaker, but I hope to find a solution sometime soon.
–Ari
P.S. Thanks, Julie…
-
July 4, 2016 at 6:45 am #86230
Ari Singer
MemberNOTES:
When you run the script you’re prompted with a dialog to enter the amount of pages that you want packaged at a time. Of course, the script does not accept any amount that is less than one, or more than the amount of pages in the documentIf you want to package each and every page individually (as Julie originally requested) just enter an amount of “1”.
NOTE: The script has one drawback: Any empty pages don’t get packaged. This might be a deal-breaker for some. I hope to find a solution to this problem sometime soon.
-
July 4, 2016 at 5:55 pm #86258
Ari Singer
MemberSorry for making you crazy with these extra-long scripts, but I finally fixed it, and I recommend you use the new code.
Now the script honors blank pages and packages it along (so books and the like don’t get messed up).//created by Ari S. -- designerjoe@outlook.com // Package entire document individually by the amount of pages at a time that you want app.scriptPreferences.enableRedraw = false; var srcDoc = app.activeDocument; var srcTitle = srcDoc.name; var srcPages = srcDoc.pages; var pgLength = srcPages.length; var srcW = srcDoc.documentPreferences.pageWidth; var srcH = srcDoc.documentPreferences.pageHeight; var srcPgLength = srcPages.length; var start = 0; var range, end, newDocName, isEnd, fileName; // ------- HERE YOU CAN CHANGE ANY PACKAGING SETTING THAT YOU WANT. TRUE means 'ON', and FALSE means 'OFF': --------- var copyingFonts = true; var copyingLinkedGraphics = true; var copyingProfiles = true; var updatingGraphics = true; var includingHiddenLayers = true; var ignorePreflightErrors = true; var creatingReport = true; var includeIDML = true; var includePDF = false; var pdfStyle = ""; var forceSave = true; var myDialog = app.dialogs.add({name:"Package Export Range", canCancel:true}); with (myDialog) { with(dialogColumns.add()) { with(dialogRows.add()) { staticTexts.add ({staticLabel:"Enter the amount of pages you want to package at a time"}); with(dialogRows.add()) { var myRangeBox = integerEditboxes.add({editValue:1}); } } } } if (myDialog.show() == true) { range = myRangeBox.editValue; if (range == 0) { alert("0 is not a range!..."); myDialog.destroy(); exit(); } else if (range > pgLength) { alert("Range can't be more than the amount of pages"); myDialog.destroy(); exit(); } run(); } else { myDialog.destroy(); exit(); } function run() { while (!isEnd) { var newDoc = app.documents.add({pageWidth: srcW, pageHeight: srcH}); newDoc.masterSpreads[0].baseName = "garbage_master"; end = start + range; if (end >= srcPages.length) { end = srcPages.length; isEnd = true; } var firstPage = srcPages[start]; var lastPage = srcPages[end - 1]; for (var j = start; j < end; j++) { var srcPage = srcPages[j]; var newPage; if (j == start) { newPage = srcPage.duplicate(LocationOptions.BEFORE, newDoc.pages[0]); for (var k = newDoc.pages.length - 1; k > 0; k--) { newDoc.pages[k].remove(); } } else { newPage = srcPage.duplicate(LocationOptions.AFTER, newDoc.pages[-1]) } srcMaster = srcPage.appliedMaster; var newMaster; try { newMaster = newDoc.masterSpreads.item(srcMaster.name); newMaster.name; } catch (myError) { newMaster = srcMaster.duplicate(undefined, newDoc); } newPage.appliedMaster = newMaster; } newDoc.masterSpreads[0].remove(); if (firstPage.side === PageSideOptions.LEFT_HAND) { newDoc.documentPreferences.startPageNumber = 2 } if (newDoc.pages.length == 1) { fileName = "Page " + firstPage.name; } else { fileName = "Pages " + firstPage.name + " - " + lastPage.name; } createPackage(newDoc); start += range; if (start == srcPages.length) { isEnd = true; } } } function createPackage(myNewDoc) { var targetFolder = new File("~/Desktop/" + srcTitle +"/" + fileName + "/"); var flag = Folder(targetFolder).create(); var versionComments = srcTitle + " " + fileName; if ( flag === true){ var garbageFolder = new File("~/Desktop/" + srcTitle +"/Delete This Folder/"); Folder(garbageFolder).create(); myNewDoc.save(new File("~/Desktop/" + srcTitle + "/Delete This Folder/" + fileName + ".indd")) myNewDoc.packageForPrint ( targetFolder, copyingFonts, copyingLinkedGraphics, copyingProfiles, updatingGraphics, includingHiddenLayers, ignorePreflightErrors, creatingReport, includeIDML, includePDF, pdfStyle, versionComments, forceSave); myNewDoc.close(SaveOptions.no); var myTempFiles = Folder(garbageFolder).getFiles(); for (l = myTempFiles.length - 1; l >= 0; l--) { myTempFiles[l].remove(); Folder(garbageFolder).remove(); } } }
-
September 28, 2016 at 7:52 am #88699
Will Homan
MemberHi Ari,
I keep getting an error message in InDesign when I try and run this script. I checked the “How to install” link you posted above. I am trying to trouble shoot what the problem may be. I have very little context for these errors, I do not have much experience with scripts in this capacity.
I did see a note from David in this post about the CMS changing the quotes when you copy and paste, could that be a concern?
https://creativepro.com/creating-batch-pdfs.phpAny help is appreciated.
thanks! -
September 28, 2016 at 10:48 am #88702
Ari Singer
MemberHi, Will.
It’s possible that the quotes is the problem. Download the original script from here: https://drive.google.com/open?id=0B1RRTxzKmM9oWDJMRjBDNUhUZGc
-
November 21, 2016 at 8:08 am #89946
Mark Welsh
MemberHi Ari,
I have just downloaded and installed your script into InDesign CS6. When I double click on the script to run it I get the following JavaScript Error message:
Error Number: 30477
Error String: Invalid value parameter
‘versionComments’ of method ‘packageForPrint’.
Expected String, but received TRUE.Engine: main
File: /Users/markw/Library/Preferences/Adobe InDesign/Version 8.0/en_GB/Scripts Panel/AutoPackage.jsx
Line: 122
Source: myNewDoc.packageForPrint (Please can you tell me if I’m doing something wrong, my document consists of 59 pages.
Kind regards
Mark-
November 21, 2016 at 9:16 am #89948
Ari Singer
MemberHi Mark. Have you tried downloading the script that I attached (as opposed to copying and pasting the text)?
-
-
November 21, 2016 at 11:59 am #89984
Mark Welsh
MemberHi Ari,
Yes I downloaded the file not copy/paste. It was called AutoPackage.jsx.txt, once I placed it in my User folder I deleted the .txt but when I double click on the script I get the error message and it only creates a separate InDesign file of the the first page, not all the pages.
When I open the .jsx file in TextEdit it shows:
//created by Ari S. — designerjoe@outlook.com
// Package entire document individually by the amount of pages at a time that you wantapp.scriptPreferences.enableRedraw = false;
var srcDoc = app.activeDocument;
var srcTitle = srcDoc.name;
var srcPages = srcDoc.pages;
var pgLength = srcPages.length;
var srcW = srcDoc.documentPreferences.pageWidth;
var srcH = srcDoc.documentPreferences.pageHeight;
var srcPgLength = srcPages.length;
var start = 0;
var range, end, newDocName, isEnd, fileName;// ——- HERE YOU CAN CHANGE ANY PACKAGING SETTING THAT YOU WANT. TRUE means ‘ON’, and FALSE means ‘OFF’: ———
var copyingFonts = true;
var copyingLinkedGraphics = true;
var copyingProfiles = true;
var updatingGraphics = true;
var includingHiddenLayers = true;
var ignorePreflightErrors = true;
var creatingReport = true;
var includeIDML = true;
var includePDF = false;
var pdfStyle = “”;
var forceSave = true;var myDialog = app.dialogs.add({name:”Package Export Range”, canCancel:true});
with (myDialog) {
with(dialogColumns.add()) {
with(dialogRows.add()) {
staticTexts.add ({staticLabel:”Enter the amount of pages you want to package at a time”});
with(dialogRows.add()) {
var myRangeBox = integerEditboxes.add({editValue:1});
}
}
}
}if (myDialog.show() == true) {
range = myRangeBox.editValue;
if (range == 0) {
alert(“0 is not a range!…”);
myDialog.destroy();
exit();
}
else if (range > pgLength) {
alert(“Range can’t be more than the amount of pages”);
myDialog.destroy();
exit();
}
run();
}
else {
myDialog.destroy();
exit();
}function run() {
while (!isEnd) {
var newDoc = app.documents.add({pageWidth: srcW, pageHeight: srcH});
newDoc.masterSpreads[0].baseName = “garbage_master”;
end = start + range;
if (end >= srcPages.length) {
end = srcPages.length;
isEnd = true;
}
var firstPage = srcPages[start];
var lastPage = srcPages[end – 1];
for (var j = start; j < end; j++) {
var srcPage = srcPages[j];
var newPage;
if (j == start) {
newPage = srcPage.duplicate(LocationOptions.BEFORE, newDoc.pages[0]);
for (var k = newDoc.pages.length – 1; k > 0; k–) {
newDoc.pages[k].remove();
}
}
else {
newPage = srcPage.duplicate(LocationOptions.AFTER, newDoc.pages[-1])
}
srcMaster = srcPage.appliedMaster;
var newMaster;
try {
newMaster = newDoc.masterSpreads.item(srcMaster.name);
newMaster.name;
}
catch (myError) {
newMaster = srcMaster.duplicate(undefined, newDoc);
}
newPage.appliedMaster = newMaster;
}
newDoc.masterSpreads[0].remove();
if (firstPage.side === PageSideOptions.LEFT_HAND) {
newDoc.documentPreferences.startPageNumber = 2
}
if (newDoc.pages.length == 1) {
fileName = “Page ” + firstPage.name;
}
else {
fileName = “Pages ” + firstPage.name + ” – ” + lastPage.name;
}
createPackage(newDoc);
start += range;
if (start == srcPages.length) {
isEnd = true;
}
}
}function createPackage(myNewDoc) {
var targetFolder = new File(“~/Desktop/” + srcTitle +”/” + fileName + “/”);
var flag = Folder(targetFolder).create();
var versionComments = srcTitle + ” ” + fileName;
if ( flag === true){
var garbageFolder = new File(“~/Desktop/” + srcTitle +”/Delete This Folder/”);
Folder(garbageFolder).create();
myNewDoc.save(new File(“~/Desktop/” + srcTitle + “/Delete This Folder/” + fileName + “.indd”))
myNewDoc.packageForPrint (
targetFolder,
copyingFonts,
copyingLinkedGraphics,
copyingProfiles,
updatingGraphics,
includingHiddenLayers,
ignorePreflightErrors,
creatingReport,
includeIDML,
includePDF,
pdfStyle,
versionComments,
forceSave);
myNewDoc.close(SaveOptions.no);
var myTempFiles = Folder(garbageFolder).getFiles();
for (l = myTempFiles.length – 1; l >= 0; l–) {
myTempFiles[l].remove();
Folder(garbageFolder).remove();
}
}
} -
January 31, 2017 at 5:10 am #91755
Heather Pointer
MemberAri
I have installed and run your script but I get this error message:Error Number:21
Error String : null is not an objectEngine: main
File: /users/jodie/Library/Preferences/Adobe Indesign/Version 11.0/
en_GB/Scripts/Scripts Panel/AutoPackage.jsx
Line: 90
Source: newMaster = srcMaster.duplicate(undefined,
newDoc);Have other people had this? how can I resolve?
Many thanks!
Heather -
March 8, 2017 at 1:48 pm #92749
Melise Gerber
MemberI just installed your script and it works beautifully. I really want to thank you in particular for including the information about which elements to change to tweak the options–I copied the script and installed a tweaked version which creates a PDF and saves each individual page without packaging the fonts or links. That is really what I need to do, so this is a double thumbs up from me.
-
March 8, 2017 at 2:39 pm #92750
Ari Singer
MemberThanks for the kind words, Melise.
-
-
April 1, 2017 at 7:29 am #93330
Evgenyi R.
MemberMany thanks Ari!
Your script works perfectly.
But could you make option of this script for export of pages according to page numbers?
Example: Page 2 or Page from 4 to 12 -
September 22, 2017 at 2:20 pm #98321
Mo Mo
MemberAri,
This is SUCH a useful script so thank you very much!! Couple things I can’t figure out…
1. When the packages are collected, it saves all the folders into what looks like an .indd file, which is ok really because when you double click to open you see it’s actually a folder with all the packaged folders inside it. Is there a way to have it package into a “regular” folder? Maybe the main folder name as an .indd extension so thats why it looks like an .indd file on my desktop?
2. Not all the layers are collected properly, often it’s missing a background image. I tried unlocking all layers or making sure all images are CMYK instead of RGB but that doesnt seem to help, as it seems pretty random but most often doesnt package a background image. I then have to go back and recollect the spread.
3. Is there a way to remove the “layer 1” layer that is created in the new packaged InDesign file?
Thank you for your insight and help!!
-
January 31, 2020 at 1:54 pm #14323171
Solomon Antonell
MemberI submitted a question the other day and it doesn’t seem like it’s showing up here. Does it need approval first?
Thanks
Sol -
January 31, 2020 at 2:01 pm #14323170
Solomon Antonell
MemberI’m resubmitting:
I’m getting the error:
Error Number:21
Error String : null is not an objectEngine: main
File: /users/jodie/Library/Preferences/Adobe Indesign/Version 11.0/
en_GB/Scripts/Scripts Panel/AutoPackage.jsx
Line: 90
Source: newMaster = srcMaster.duplicate(undefined,
newDoc);I’m using the newest InDesign 2020 v15
Are there ways to fix this?
Thanks,
Sol -
January 31, 2020 at 2:02 pm #14323169
David Blatner
KeymasterSorry about that, Solomon… I think something in the code forced it into our moderation queue. It’s up now.
-
January 31, 2020 at 5:50 pm #14323167
Solomon Antonell
MemberThank you.
Anyone, have any solutions?
Thanks,
Sol -
April 9, 2020 at 3:26 pm #1237634
Ken Mcguire
MemberHi Ari Is there a final file.
I pulled the version posted: July 4, 2016 at 5:55 pm by Ari but I get an error:
Error Number: 30477
Error String: invalid value. for parameter
?useDocumentHyphenationExceptionsOnly? of method package for print?. Expeceted Boolean, but received “filename.indd Page 1”.
-
-
AuthorPosts
- The forum ‘General InDesign Topics (CLOSED)’ is closed to new topics and replies.
