inDesign 批量导出PDF的jsx脚本

0 阅读2分钟

先上代码再做说明

// 批量导出indd文档为PDF(带预设选项)

// 1. 获取所有可用的 PDF 导出预设名称
var presetNames = [];
for (var i = 0; i < app.pdfExportPresets.length; i++) {
    presetNames.push(app.pdfExportPresets[i].name);
}

// 如果没有预设,提示用户并退出
if (presetNames.length === 0) {
    alert("错误:未找到任何 PDF 导出预设!\n请先在 InDesign 中创建至少一个预设 (文件 > Adobe PDF 预设)。");
    exit();
}

// 2. 让用户选择预设
var selectedPresetName = SelectDialog("选择 PDF 导出预设", "请选择用于导出的 PDF 预设:", presetNames);
if (!selectedPresetName) exit(); // 用户取消选择

// 3. 获取预设对象
var pdfPreset = app.pdfExportPresets.itemByName(selectedPresetName);

// 检查预设是否有效
if (!pdfPreset.isValid) {
    alert("错误:选择的预设无效!");
    exit();
}

// 4. 选择包含ID文档的文件夹
var docFolder = Folder.selectDialog("选择包含 ID 文档的文件夹");
if (!docFolder) exit();

var inddFiles = docFolder.getFiles("*.indd"); // 获取所有.indd 文件

if (inddFiles.length === 0) {
    alert("该文件夹中没有找到 .indd 文件。");
    exit();
}

// 5. 循环处理文件
var successCount = 0;
for (var k = 0; k < inddFiles.length; k++) {
    var inddFile = inddFiles[k];
    
    try {
        // 打开文档 (静默打开,不显示界面)
        var doc = app.open(inddFile, true); 
        
        // 构建 PDF 路径
        var pdfPath = new File(inddFile.path + "/" + inddFile.name.replace(/\.indd$/i, ".pdf")); 
        
        // 导出 PDF (使用选定的预设)
        // 参数说明: exportFile(格式, 文件路径, 显示对话框, PDF预设)
        doc.exportFile(ExportFormat.PDF_TYPE, pdfPath, false, pdfPreset); 
        
        // 关闭文档 (不保存对原文件的修改)
        doc.close(SaveOptions.NO); 
        
        successCount++;
    } catch (e) {
        // 如果出错,尝试关闭文档以防万一,然后继续下一个
        try { if (app.documents.length > 0) app.activeDocument.close(SaveOptions.NO); } catch (e2) {}
        alert("导出失败: " + inddFile.name + "\n错误信息: " + e.message);
    }
}

alert("批量导出完成!\n成功导出: " + successCount + " / " + inddFiles.length + " 个文件。\n使用的预设: " + selectedPresetName);

// --- 辅助函数: 简单的下拉选择对话框 ---
function SelectDialog(dialogTitle, promptText, itemsArray) {
    var win = new Window("dialog", dialogTitle);
    win.orientation = "column";
    win.alignChildren = "fill";
    
    var promptLabel = win.add("statictext", undefined, promptText);
    promptLabel.justify = "center";
    
    var list = win.add("dropdownlist", undefined, itemsArray);
    list.selection = 0; // 默认选中第一个
    
    var btnGroup = win.add("group");
    btnGroup.alignChildren = ["right", "center"];
    btnGroup.margins = [0, 10, 0, 0];
    
    var okBtn = btnGroup.add("button", undefined, "确定");
    var cancelBtn = btnGroup.add("button", undefined, "取消");
    
    okBtn.onClick = function() { win.close(1); };
    cancelBtn.onClick = function() { win.close(0); };
    
    // 双击列表项也确认
    list.onChanging = function() {
        // 可选:如果需要双击逻辑,可以在这里添加计时器,通常直接点确定即可
    };
    
    if (win.show() == 1) {
        return list.selection.text;
    } else {
        return null;
    }
}

把以上代码保存成 文件名.jsx 文件,copy到一下目录

macOSUsers/ [用户名] /Library/Preferences/Adobe InDesign/ [版本] / [语言] /Scripts/Scripts Panel
WindowsUsers\ [用户名] \AppData\Roaming\Adobe\InDesign\ [版本] \ [语言] \Scripts\Scripts Panel

找不到目录的,可以在“脚本”tab里右键“用户”,可以查看脚本文件夹位置 显示脚本目录.png

在“脚本”tab里双击jsx这个文件,弹出PDF导出预设选择框,没有合适的预设可以先去自定义预设。 PDF预设.png

在“选择PDF导出预设”窗口选择好后点“确定”,新的窗口中选择一个包含indd文件的文件夹(只处理当前文件夹内的所有indd文件,不会处理子目录),点“打开”。

自动导出PDF就完成了。(・∀・)🎉

关于脚本的详细说明,请看adobe官方文档 helpx.adobe.com/cn/indesign…