Copy link to clipboard
Copied
Hello Dano,
If you have data in your master.xls that you can also have as part of your merge process see the steps below....
1. Start off by creating a Paragraph style named "PDF_name"
2. Create a text box in the slug area with a portion of the box within the page bounds and assign the Paragraph style "PDF_name"
3. Assign the field from the data source for the pdf naming
4. Create and save the Merged document, run the script to export the pdfs
The below script will export pdfs named by the contents
Fixing the typo does not solve the issue though...
I would greatly appreciate you help.
By @gijsd18053393
As per the screenshot - you have wrong quotes:
copy the one from the rectangle instead of the around [...]:
Copy link to clipboard
Copied
Hello Dano,
If you have data in your master.xls that you can also have as part of your merge process see the steps below....
1. Start off by creating a Paragraph style named "PDF_name"
2. Create a text box in the slug area with a portion of the box within the page bounds and assign the Paragraph style "PDF_name"
3. Assign the field from the data source for the pdf naming
4. Create and save the Merged document, run the script to export the pdfs
The below script will export pdfs named by the contents of the text box useing the Paragraph style named "PDF_name from each page
var doc = app.documents[0];
var myResult = {};
var allStoriesArray = app.documents[0].stories.everyItem().getElements();
for(var n=0; n<allStoriesArray.length; n++){
var currentStory = allStoriesArray[n];
var textContainersLength = currentStory.textContainers.length;
var lastFrameOfStory = currentStory.textContainers[textContainersLength-1];
var objToCheck = lastFrameOfStory;
if(lastFrameOfStory.constructor.name == "TextPath")
objToCheck = lastFrameOfStory.parent
if(currentStory.overflows && objToCheck.itemLayer.visible && objToCheck.parentPage != null)
myResult[objToCheck.parentPage.name] = objToCheck.parentPage.name;
}
var pageList = new Array;
for(var a in myResult)
pageList.push(a);
pageList.sort(function(a,b) {return a-b});
if(pageList.length > 0){
alert("Error!\nDocument contains overset text on page(s): \r" + pageList);
exit();
}
var mLinks = doc.links;
for(var i = 0; i < mLinks.length; i++){
if ((mLinks[i].status == LinkStatus.LINK_MISSING || mLinks[i].status == LinkStatus.LINK_OUT_OF_DATE) && checkIfOnPage(mLinks[i].parent.parent) && mLinks[i].parent.parent.itemLayer.visible == true ){
alert("Error!\nThis document contains links to files that are missing or modified, use the links panel to fix the problem(s) and try again!");
exit();
}
}
function checkIfOnPage(mItem){
var _OldZeroPoint = app.activeDocument.zeroPoint;
app.activeDocument.zeroPoint = [0,0];
var _Width =app.activeDocument.documentPreferences.pageWidth;
var _Height=app.activeDocument.documentPreferences.pageHeight;
var _Bounds = mItem.geometricBounds;
if ((_Bounds[3] < 0) || (_Bounds[1] > _Width) || (_Bounds[0] > _Height) || (_Bounds[2] < 0)){
return false
}else{
return true
}
app.activeDocument.zeroPoint =_OldZeroPoint;
}
function myGetPageNames(){
var myPageNames = new Array;
for(myCounter = 0; myCounter < app.activeDocument.pages.length; myCounter ++){
myPageNames.push(app.activeDocument.pages.item(myCounter).name);
}
return myPageNames;
}
//Function Returns pdf_name for Selected Pages
function getTextFromPageUsingParagraphStyle(myPage){
if (doc.paragraphStyles.itemByName("PDF_name") == null) {
alert ('Error!\nThe Paragraph Style "PDF_name" does not exist or is Labeled Incorrectly.');
exit();
}
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = "PDF_name";
var myTextframes = myPage.textFrames;
var pdf_name = null;
for (y=0; y < myTextframes.length; y++){
try {
var mySearchResult = myTextframes[y].findText();
if (mySearchResult.length > 0){
pdf_name = mySearchResult[0].contents;
break;
}
}catch (e){
}
}
return pdf_name;
}
//Dialog/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var mySelectedFolder = Folder.selectDialog ("Select a Folder");
if(mySelectedFolder != null){
}else{
exit();
}
var myDialog = app.dialogs.add({name:"DataMerge 1-Page HR Pdf Exporter", canCancel:true});
with (myDialog){
with (dialogColumns.add()){
with (dialogRows.add())
staticTexts.add({staticLabel:"Page Range Options", minWidth:25});
with (borderPanels.add()){
var myradiogroup1 = radiobuttonGroups.add();
with (myradiogroup1){
var myyesradiobutton1 = radiobuttonControls.add({staticLabel:'Export All Pages', checkedState:true});
var mynoradiobutton1 = radiobuttonControls.add({staticLabel:'Export Select Pages'});
staticTexts.add({staticLabel:"", minWidth:75});
}
}
}
}
if (myDialog.show() == true){
var SelectedPages = myradiogroup1.selectedButton;
}else{
}
myDialog.destroy();
//All Pages//////////////////////////////////////////////////////////////////////////////////////////////////
if (SelectedPages == false){
for(var p = 0; p < app.documents[0].pages.length; p++) {
var frames = app.documents[0].pages[p].textFrames;
var pdf_name = null;
for(var i = 0; i < frames.length; i++) {
try {
if(frames[i].paragraphs[0].appliedParagraphStyle.name == 'PDF_name') {
pdf_name = frames[i].paragraphs[0].contents;
break;
}
}catch (e){
}
}
if (pdf_name == null) {
alert ('Error!\nThe Paragraph Style "pdf_name" is not applied to one or more of the pages or is Labeled Incorrectly.');
exit();
}
if(pdf_name != null) {
}
app.pdfExportPreferences.pageRange = app.documents[0].pages[p].name;
var export_preset = app.pdfExportPresets.item("[High Quality Print]");
doc.exportFile(ExportFormat.PDF_TYPE, File(mySelectedFolder +"/"+ pdf_name + ".pdf"), false, export_preset);
}
alert("Done Exporting Pdf's!");
}
//Selected Pages/////////////////////////////////////////////////////////////////////////////////////////////
if (SelectedPages == true){
for(var p = 0; p < app.documents[0].pages.length; p++) {
var frames = app.documents[0].pages[p].textFrames;
var pdf_name = null;
for(var i = 0; i < frames.length; i++) {
try {
if(frames[i].paragraphs[0].appliedParagraphStyle.name == 'PDF_name') {
pdf_name = frames[i].paragraphs[0].contents;
break;
}
}catch (e){
}
}
if (pdf_name == null) {
alert ('Error!\nThe Paragraph Style "PDF_name" is not applied to one or more of the pages or is Labeled Incorrectly.');
exit();
}
if(!pdf_name) continue;
}
var myPageNames = myGetPageNames();
var selectPgs = new Window ("dialog", "Select Page#'s To Export");
var pgGroup = selectPgs.add("group");
pgGroup.orientation = "column";
pgGroup.alignChildren = "center";
pgGroup.add("statictext", undefined, "Export Single Page pdf's");
var pgsList = pgGroup.add("listbox", [-25, 0, 170, 246], myPageNames, {multiselect: true});
var selectedpgsList = [];
for (var i = 0; i < pgsList.items.length; i++){selectedpgsList[-1] = pgsList.items[i];}
pgsList.selection = selectedpgsList;
var btn = selectPgs.add("group");
btn.orientation = "row";
btn.alignment = ["right", "top"];
var okBtn = btn.add ("button", undefined, "OK", {name:"OK"});
var cancelBtn = btn.add ("button", undefined, "Cancel", {name:"Cancel"});
var result = selectPgs.show();
if(result == 1){
}
else if (result== 2){
exit(0);
}
var pagelist = [];
if(pgsList.selection == null){
alert ("Error!\nNo page#'s were selected.")
exit();
}else{
for (var i=0; i<pgsList.selection.length; i++) {
pagelist.push(pgsList.selection[i].text);
}
}
for (i = 0; i < doc.pages.length; i++) {
if (String(pagelist).match("\\b"+doc.pages[i].name+"\\b")){
var pdf_name = getTextFromPageUsingParagraphStyle(doc.pages[i]);
app.pdfExportPreferences.pageRange = doc.pages[i].name;
var export_preset = app.pdfExportPresets.item("[High Quality Print]");
doc.exportFile(ExportFormat.PDF_TYPE, File(mySelectedFolder +"/"+ pdf_name + ".pdf"), false, export_preset);
}
}
alert("Done Exporting Pdf's!");
}
Regards,
Mike
Copy link to clipboard
Copied
That's awesome Mike! Thanks for sharing!
Copy link to clipboard
Copied
Mike,
Thank you so much, getting there.
One more question how do I get the above code saved as a .jsx file to place in my Scripts Panel?
Cheers
Copy link to clipboard
Copied
Just copy the code and paste into a text editor as plain text. Save that file as [myfilename].jsx and put it in your InDesign scripts folder.
Copy link to clipboard
Copied
Guys,
Just did a test run on 40 pages and it worked.
Brilliant.
Thank you so, so much.
Copy link to clipboard
Copied
Can you create a quick tutorial video?
Copy link to clipboard
Copied
How do I set the PDF as a PDF (print) with crop marks and bleed?
Copy link to clipboard
Copied
Hello @Luke24864044f9cy,
Change the line below by changing "[High Quality Print]" to "your preset name"
//Change this line:
var export_preset = app.pdfExportPresets.item("[High Quality Print]");
//Change to:
var export_preset = app.pdfExportPresets.item("your preset name here");
Regards,
Mike
Copy link to clipboard
Copied
Hi Mike. Thank you for the script. Was hoping to see if we could revise the script for .png file format instead?
Copy link to clipboard
Copied
Is there also a way to export interactive pdfs instead of normal pdf's? i am using a button in the design wich disappears when exporting as a normal pdf. And the renaming option would be fantastic for me to use....
Copy link to clipboard
Copied
Hey Thanks for this script and explenation.
I've run though all the steps but I get an error when running the script. I'm new to this and don't know what to do with this error.
Error number: 8
Error string: Syntax error
Line: 1
Source: {\rtf1\ansi\ansicpg1252\cocoart2759
Offending Text: \
Copy link to clipboard
Copied
Hey Thanks for this script and explenation.
I've run though all the steps but I get an error when running the script. I'm new to this and don't know what to do with this error.
Error number: 8
Error string: Syntax error
Line: 1
Source: {\rtf1\ansi\ansicpg1252\cocoart2759
Offending Text: \
By @gijsd18053393
You need to copy and paste code of the script into a Notepad - and save as PlainText - it looks like you've saved it as RTF...
Copy link to clipboard
Copied
Hey thanks for your feedback! Greatly appreciate the speed on that.
I've made it a plain text file and rename .jsx and placed it in the correct folder.
Now I get an error where the export preset needs to be filled.
I've used:
var export_preset = app.pdfExportPresets.item(“[Smalles File Size]”);
doc.exportFile(ExportFormat.PDF_TYPE, File(mySelectedFolder +"/"+ pdf_name + ".pdf"), false, export_preset);
and get this error now:
Copy link to clipboard
Copied
Spotted the typo there, sorry!
Copy link to clipboard
Copied
Fixing the typo does not solve the issue though...
I would greatly appreciate you help.
Copy link to clipboard
Copied
Fixing the typo does not solve the issue though...
I would greatly appreciate you help.
By @gijsd18053393
As per the screenshot - you have wrong quotes:
copy the one from the rectangle instead of the around [...]:
Copy link to clipboard
Copied
Yes, you are right.
Succesfully exported 670 uniquely named pdf's.
Great appreciate your effort, please forgive my ignorence as I'm new to this.
Thanks allot!
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Hello,
I have got this type of problem:(
I already used with other file and its worked , but i made a new file and this is the problem now:(
Copy link to clipboard
Copied
Hello,
I have got this type of problem:(
I already used with other file and its worked , but i made a new file and this is the problem now:(
By @DoriMadiLancos
What are the names of your pages?
Can you post a screenshot of the Pages panel?
Copy link to clipboard
Copied
I solved the problem in the meantime.
There was a "/" in the file name that was the problem.:( But i delet it and now it works:)
Thanks!
Copy link to clipboard
Copied
I'm very late to this conversation but I have a script that is called "data merge to single records" that does - exactly that. It's over at colecandoo.com and the free version does InDesign and PDF with names based on contents of whatever fields you want to use, and the paid pro version does that and EPS, JPG, and PNG.
Copy link to clipboard
Copied
My solution, but not free. There is a 30-day trial.
https://www.marspremedia.com/software/indesign/export-named-pages