package for output – single pages, from a multi page document
Learn / Forums / General InDesign Topics / package for output – single pages, from a multi page document
- This topic has 25 replies, 12 voices, and was last updated 3 years, 11 months ago by Solomon Antonell.
-
AuthorPosts
-
-
May 15, 2016 at 6:11 pm #84909Julie FairlessMember
I’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 #84932Ari SingerMember
This 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 #84937Ari SingerMember
Here 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. -- [email protected] // 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 #84946Julie FairlessMember
Thanks Chap – will have a look at running the script and let you know how it works. :)
-
July 1, 2016 at 7:58 am #86193Wil BuchananMember
Hey 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 #86194Ari SingerMember
It 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 #86218Julie FairlessMember
hey Ari, thanks for your efforts – its amazing!!
-
July 3, 2016 at 10:05 pm #86225Ari SingerMember
//created by Ari S. -- [email protected] // 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 #86231Ari SingerMember
The 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 #86230Ari SingerMember
NOTES:
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 #86258Ari SingerMember
Sorry 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. -- [email protected] // 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 #88699Will HomanMember
Hi 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 #88702Ari SingerMember
Hi, 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 #89946Mark WelshMember
Hi 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 #89948Ari SingerMember
Hi 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 #89984Mark WelshMember
Hi 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. — [email protected]
// 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 #91755Heather PointerMember
Ari
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 #92749Melise GerberMember
I 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 #92750Ari SingerMember
Thanks for the kind words, Melise.
-
-
April 1, 2017 at 7:29 am #93330Evgenyi R.Member
Many 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 #98321Mo MoMember
Ari,
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 #14323171Solomon AntonellMember
I 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 #14323170Solomon AntonellMember
I’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 #14323169David BlatnerKeymaster
Sorry 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 #14323167Solomon AntonellMember
Thank you.
Anyone, have any solutions?
Thanks,
Sol -
April 9, 2020 at 3:26 pm #1237634Ken McguireMember
Hi 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
- You must be logged in to reply to this topic.