ok, here’s the last lesson (for now) on exporting each page of an InDesign file as a separate pdf using applescript. lesson 32 showed a basic solution and lesson 33 expanded it to allow for more naming options. this lesson will look at how to generate the pdf filenames from information saved in the InDesign file itself. this solution was prompted by comment 39 in this discussion :
I’m using InDesign to manage 200+ pages of tech sheets for a company … The obvious benefit of using InDesign and having all the tech sheets in a single file is because then I can edit and update Master Pages and have the changes reflected in all of the tech sheets. The major downside though is that when exporting the PDFs … the file name must be specified manually for each tech sheet.
as always, there are many ways to skin a cat. we’re going to look at two approaches — naming based on the heading text of each page, and naming based on script labels. both solutions rely on setting up the InDesign file in a particular way and both solutions begin with this basic setup (refer to the previous lessons for an explanation of these parts of the script) :
tell application id "com.adobe.InDesign" set raster resolution of interactive PDF export preferences to one hundred forty four ppi set (export reader spreads of interactive PDF export preferences) to false set mgFolder to file path of active document set mgDocName to name of active document end tell tell application "Finder" if (exists folder "the pdfs" of folder mgFolder) is false then make folder at mgFolder with properties {name:"the pdfs"} end if end tell tell application id "com.adobe.InDesign" repeat with x in pages of active document set mgPageName to name of x set page range of interactive PDF export preferences to mgPageName tell active document -- REST OF FUNCTIONALITY WILL GO IN HERE set mgFilePath to mgFolder & "the pdfs:" & mgText & ".pdf" as string export format interactive PDF to mgFilePath without showing options end tell end repeat display dialog "ALL DONE!" buttons {"OK"} default button 1 end tell
here’s a snippet of our InDesign file :
there are a few different approaches you could use to pull out the heading on each page as the filename for each pdf. but the easiest way is to set up the InDesign file so that those heading text frames are on their own layer (for this example we’ve called the layer ‘header layer’). so, each page has only one text frame on the header layer — the heading. here’s the remainder of the code to be plugged into the basic script above :
set mgFrames to (text frames of x whose name of item layer is "header layer") set mgFrame to item 1 of mgFrames set mgText to contents of item 1 of mgFrame
the first line makes a list of all the text frames on the page on the header layer (this should be a list with only one item). the second line references the first (and only) item in the list — the heading text frame. and the third line grabs the ‘contents’ of that frame (the heading text) to use as the pdf filename. running that completed script will give you this result :
simple, eh?
the alternative method allows you to specify a filename for each page without that filename actually appearing anywhere on the page — the invisible script label. script labels are awesome and were the key to the functioning of the calendars script. a script label can be assigned to any page item, but for this example we’re going to label the heading text frames.
you open the script label panel under windows > utilities. select the frame you want to label — then just type the new label into the panel. once you’re done, deselect the frame — don’t just go to a different page, the script label won’t stick — and don’t hit ‘return’, as this will become part of the label :
providing you have only one labelled item on each page, you only need to add one extra line to that original basic script above :
set mgText to get (label of every page item of x whose label is not "")
another variation will also add the export date to the pdf filenames — this is a good way to keep track of which version you’re up to. we just need to add two more lines :
set mgDate to do shell script "date '+%d-%m-%y'"
and
set mgText to mgText & "_" & mgDate
so the finished script would look like this :
and would create pdfs like this :
ok, so there we have it — a few variations on the exporting-each-page-as-a-separate-pdf theme. hopefully, from this brief introduction, you can see that there are any number of ways to get the job done with applescript. there’s a solution out there for just about any workflow.
keep grunting.
Super useful and time saving. Could you please change the script to include the following UI:
tell application id “com.adobe.InDesign”
activate
set mgDialog to make dialog with properties {name:”Export preset to use : “}
tell mgDialog
make dialog column
tell the result
set mgExportButtons to make radiobutton group
tell mgExportButtons
make radiobutton control with properties {static label:”Press Quality”, checked state:true}
make radiobutton control with properties {static label:”Inhouse Printing”}
make radiobutton control with properties {static label:”Screen Resolution”}
end tell
end tell
end tell
show mgDialog
end tell
This is the version of script that I am using:
tell application id “com.adobe.InDesign”
set raster resolution of interactive PDF export preferences to one hundred forty four ppi
set (export reader spreads of interactive PDF export preferences) to false
set mgFolder to file path of active document
set mgDocName to name of active document
end tell
tell application “Finder”
if (exists folder “the pdfs” of folder mgFolder) is false then
make folder at mgFolder with properties {name:”the pdfs”}
end if
end tell
tell application id “com.adobe.InDesign”
repeat with x in pages of active document
set mgPageName to name of x
set page range of interactive PDF export preferences to mgPageName
tell active document
set mgText to get (label of every page item of x whose label is not “”)
set mgFilePath to mgFolder & “the pdfs:” & mgText & “.pdf” as string
export format interactive PDF to mgFilePath without showing options
end tell
end repeat
display dialog “ALL DONE!” buttons {“OK”} default button 1
end tell
Thank you! :)
Hi Liz
I’m sorry, I do not have time to build a full working script for your workflow.
The purpose of this site was to show how things can be done and what can be achieved.
I expect there is enough information on this site to help you reach the goal you are aiming for.
Best of luck.
m.
Really useful, Kudos!
Thanks for your excellent and massively-time-saving script – loving it!!!
Just a query, can you please tell me how to change this script so every TWO pages export as a separate pdf? REALLY appreciate your expertise. :)
G’day Geri
I’m not sure which version of the export script you are using — but this should give you a fair idea …
replace this :
repeat with x in pages of active document
set mgPageName to name of x
set page range of interactive PDF export preferences to mgPageName
with this :
set mgPageCount to count pages of active document
repeat with mgCount from 1 to mgPageCount by 2
set page range of interactive PDF export preferences to ((mgCount as string) & "-" & (mgCount + 1) as string)
Hope that gets you close.
m.
Thank you for your help! I’ll see how I go. :D