Skip to main content
dublove
Braniac
June 17, 2025
Answered

What is the script for page selection when exporting pdf?

  • June 17, 2025
  • 2 replies
  • 862 views

I would like to add an export range to the script for exporting pdfs.
There are a lot of scripts on the internet for exporting pdf's, and it seems that they can only call templates, and do not set the export page.
Is there similar information can be recommended to me?

 

Correct answer rob day

This next one looks like you wrote it.
It feels more complete, but it seems like the script isn't responding

 

Try this:

 

makeDialog();
//the preset and page range
var pp, pr;
function makeDialog(){
    var theDialog = app.dialogs.add({name:"Choose a Preset", canCancel:true});
    with(theDialog.dialogColumns.add()){
        staticTexts.add({staticLabel:"Export Preset:"});
        staticTexts.add({staticLabel:"Page Range:"});
    }
    with(theDialog.dialogColumns.add()){
        pp = dropdowns.add({stringList:app.pdfExportPresets.everyItem().name, selectedIndex:3});
        pr = textEditboxes.add({editContents:""});
    }
    if(theDialog.show() == true){
        //dialog results preset and page range
        pp = app.pdfExportPresets.item(pp.selectedIndex);
        pr = pr.editContents.split(',');
        main();
        theDialog.destroy();
	}
}

function main(){
    var doc = app.activeDocument;
    //make sure the doc has been saved
    if (!doc.saved) {
        alert("Please Save")
        return
    } 
    //path for the PDF export
    var fp = doc.filePath + "/" +  doc.name.replace(/\.[^\.]+$/, '') + ".pdf"
    //the selected preset to use
    var pre  = app.pdfExportPresets.itemByName(pp.name);
    //the page range (needs to be a string)
    app.pdfExportPreferences.pageRange = pr.toString()
    //export PDF, file path, show dialog, preset
    doc.exportFile(ExportFormat.pdfType, File(fp), false, pre);
} 

2 replies

rob day
Braniac
June 17, 2025

This exports a PDF to the same folder as the InDesign file using PDF/X-4 as the base preset:

 

//run the main function
main()

function main(){
    var doc = app.activeDocument;
    //make sure the doc has been saved
    if (!doc.saved) {
        alert("Please Save")
        return
    } 
    //path for the PDF
    var fp = doc.filePath + "/" +  doc.name.replace(/\.[^\.]+$/, '') + ".pdf"
    
    //a temporary preset based on PDF/X-4
    var pre = makePDFPreset("Temp", app.pdfExportPresets.itemByName("[PDF/X-4:2008]"));
    //set adjusted properties
    pre.properties={pageRange:"1", cropMarks:true}
    //export PDF, file path, show dialog, preset
    doc.exportFile(ExportFormat.pdfType, File(fp), false, pre);
    //remove the temp preset
    pre.remove()
} 

function makePDFPreset(n, bo){
    var ps  = app.pdfExportPresets.itemByName(n);
    if (ps.isValid) {
        return ps;
    } else {
        ps = app.pdfExportPresets.add({name:n});
        ps.properties = bo.properties;
        return ps;
    }
}
dublove
dubloveAuthor
Braniac
June 18, 2025

Find this.

//DESCRIPTION:Export page ranges with single PDF Export Dialog
// Modified on 02-Mar-2025

pglist = prompt('Page list', '');
path = app.activeDocument.fullName.path;
//pglist = pglist.split(/,\s*/);

// Ask the user to manually configure the export settings once
var pdfFile = new File(path + '/temp_export.pdf');
app.activeDocument.exportFile(ExportFormat.PDF_TYPE, pdfFile, true); // Opens dialog once
pdfFile.remove(); // Delete temporary file

// Apply the same settings to the rest
for (i = 0; i < pglist.length; i++) {
    app.pdfExportPreferences.pageRange = pglist[i];
    var finalPdfFile = new File(path + '/pages_' + pglist[i] + '.pdf');
    app.activeDocument.exportFile(ExportFormat.PDF_TYPE, finalPdfFile, false); // Uses the same settings

 

@rob day 

This next one looks like you wrote it.
It feels more complete, but it seems like the script isn't responding

makeDialog();
var pp, pglist;

function makeDialog(){
    var theDialog = app.dialogs.add({name:"Choose a Preset", canCancel:true});
    with(theDialog.dialogColumns.add()){
        staticTexts.add({staticLabel:"Export Preset:"});
        staticTexts.add({staticLabel:"Page Range:"});
        
    }
    with(theDialog.dialogColumns.add()){
        pp = dropdowns.add({stringList:app.pdfExportPresets.everyItem().name, selectedIndex:3, minWidth:80});
        pglist = textEditboxes.add({editContents:"", minWidth:350});
    }
    if(theDialog.show() == true){
        pp = app.pdfExportPresets.item(pp.selectedIndex);
        pglist = pglist.editContents.split(',');
        var path = app.activeDocument.fullName.path;
        for (i=0; i<pglist.length; i++){
            app.pdfExportPreferences.pageRange = pglist[i];
            app.activeDocument.exportFile(ExportFormat.PDF_TYPE, File(path+'/pages_'+pglist[i]+'.pdf'), false, pp);
        }
        theDialog.destroy();
	}
}

 

rob day
rob dayCorrect answer
Braniac
June 18, 2025

This next one looks like you wrote it.
It feels more complete, but it seems like the script isn't responding

 

Try this:

 

makeDialog();
//the preset and page range
var pp, pr;
function makeDialog(){
    var theDialog = app.dialogs.add({name:"Choose a Preset", canCancel:true});
    with(theDialog.dialogColumns.add()){
        staticTexts.add({staticLabel:"Export Preset:"});
        staticTexts.add({staticLabel:"Page Range:"});
    }
    with(theDialog.dialogColumns.add()){
        pp = dropdowns.add({stringList:app.pdfExportPresets.everyItem().name, selectedIndex:3});
        pr = textEditboxes.add({editContents:""});
    }
    if(theDialog.show() == true){
        //dialog results preset and page range
        pp = app.pdfExportPresets.item(pp.selectedIndex);
        pr = pr.editContents.split(',');
        main();
        theDialog.destroy();
	}
}

function main(){
    var doc = app.activeDocument;
    //make sure the doc has been saved
    if (!doc.saved) {
        alert("Please Save")
        return
    } 
    //path for the PDF export
    var fp = doc.filePath + "/" +  doc.name.replace(/\.[^\.]+$/, '') + ".pdf"
    //the selected preset to use
    var pre  = app.pdfExportPresets.itemByName(pp.name);
    //the page range (needs to be a string)
    app.pdfExportPreferences.pageRange = pr.toString()
    //export PDF, file path, show dialog, preset
    doc.exportFile(ExportFormat.pdfType, File(fp), false, pre);
} 

dublove
dubloveAuthor
Braniac
June 17, 2025

Having looked for too many references, it feels a bit complicated.

https://github.com/MoebiusSt/exportPageRangesToPDF.jsx/blob/main/exportPageRangesToPDFs_v206.jsx

Also read this one above, also super complicated ......

The fire is too bad. It's dizzying to watch.


I just want to receive these four things from the dialog box and add them to the code below:

All pages:
Page range:

Single or cross page

 

pageRange = PageRange.ALL_PAGES;
pageRange = PageRange.SELECTED_ITEMS;
exportAsSinglePages=0
or
exportAsSinglePages=1

Now it can't set a page number.

/*
原址
https://community.adobe.com/t5/indesign-discussions/can-today-s-date-be-automatically-added-before-the-file-name-when-export-pdf/m-p/15134450
*/
var myDocument = app.activeDocument;


//获取桌面路径
//var desktopPath = "~/Desktop/pdf/";
var desktopPath = Folder.desktop;


var myFileName = myDocument.name.replace(/\.indd$/, ''); // Remove the .indd extension
var myDate = new Date();
var myYear = myDate.getFullYear();
var myMonth = ("0" + (myDate.getMonth() + 1)).slice(-2); // Add leading zero
var myDay = ("0" + myDate.getDate()).slice(-2); // Add leading zero
var myFormattedDate = myYear + "-" + myMonth + "-" + myDay;


var myPDFFile = new File(desktopPath + "/" + "pdf" + "/" + myFormattedDate + "-" + myFileName + ".pdf");
//var myPDFFile = new File(myDocument.filePath + "/" + myFormattedDate + "-" + myFileName + ".pdf");

// Create a dialog for selecting the PDF export preset
var myDialog = new Window('dialog', 'Select PDF Export Preset');
myDialog.orientation = 'column';
myDialog.alignChildren = 'left';

var myDropdown = myDialog.add('dropdownlist', undefined, app.pdfExportPresets.everyItem().name);
myDropdown.selection = 0;

var myButtonGroup = myDialog.add('group');
myButtonGroup.orientation = 'row';



myButtonGroup.add('button', undefined, 'OK', { name: 'ok' });
myButtonGroup.add('button', undefined, 'Cancel', { name: 'cancel' });

try {
    if (myDialog.show() == 1) {
        var myPDFExportPreset = app.pdfExportPresets.item(myDropdown.selection.text);
        myDocument.exportFile(ExportFormat.PDF_TYPE, myPDFFile, false, myPDFExportPreset);
    } else {
        alert('Export canceled');
    }
}
catch (e) { alert("PDF文件已打开……") }
rob day
Braniac
June 17, 2025

This is the same with a simple preset dialog

 


makeDialog();
var pp;   
function makeDialog(){
    var theDialog = app.dialogs.add({name:"Choose a Preset", canCancel:true});
    with(theDialog.dialogColumns.add()){
        pp = dropdowns.add({stringList:app.pdfExportPresets.everyItem().name, selectedIndex:3, minWidth:80});
    }
    if(theDialog.show() == true){
        pp = app.pdfExportPresets.item(pp.selectedIndex);
        main();
        theDialog.destroy();
	}
}

function main(){
    var doc = app.activeDocument;
    //make sure the doc has been saved
    if (!doc.saved) {
        alert("Please Save")
        return
    } 
    //path for the PDF
    var fp = doc.filePath + "/" +  doc.name.replace(/\.[^\.]+$/, '') + ".pdf"
    
    //a temporary preset based on PDF/X-4
    var pre = makePDFPreset("Temp", app.pdfExportPresets.itemByName(pp.name));
    //set adjusted properties, setting pagerange and cropmarks here edit as needed
    pre.properties={pageRange:"1", cropMarks:true}
    //export PDF, file path, show dialog, preset
    doc.exportFile(ExportFormat.pdfType, File(fp), false, pre);
    //remove the temp preset
    pre.remove()
} 

function makePDFPreset(n, bo){
    var ps  = app.pdfExportPresets.itemByName(n);
    if (ps.isValid) {
        return ps;
    } else {
        ps = app.pdfExportPresets.add({name:n});
        ps.properties = bo.properties;
        return ps;
    }
}