求InDesign脚本:将跨页导出为双页PDF并按表格单元格命名
InDesign批量导出跨页PDF并提取表格型号命名脚本
脚本功能
- 遍历文档所有跨页,将每个跨页导出为独立PDF
- 从跨页左侧页面的固定表格单元格提取产品型号,作为PDF文件名
- 自动清理文件名中的非法字符,适配系统命名规则
完整脚本代码
#target indesign // 获取当前活动文档 var doc = app.activeDocument; // 选择PDF导出预设(可替换为自定义预设名称) var pdfPreset = app.pdfExportPresets["[High Quality Print]"]; // 让用户选择导出文件夹 var exportDir = Folder.selectDialog("选择PDF导出文件夹"); if (!exportDir) { alert("未选择文件夹,脚本终止"); exit(); } // 遍历每个跨页 for (var spreadIdx = 0; spreadIdx < doc.spreads.length; spreadIdx++) { var currentSpread = doc.spreads[spreadIdx]; // 取跨页的左侧页面(Letter跨页默认第一个页面为左页) var leftPage = currentSpread.pages[0]; // --- 关键:定位目标表格和单元格 --- // 示例:获取左侧页面第一个表格,取第1行第1列内容(根据实际情况调整) var targetTable = null; // 遍历页面所有文本框,找到包含表格的那个 var textFrames = leftPage.textFrames.everyItem().getElements(); for (var tfIdx = 0; tfIdx < textFrames.length; tfIdx++) { var tf = textFrames[tfIdx]; if (tf.parent instanceof Table) { targetTable = tf.parent; break; } } if (!targetTable) { $.writeln("跨页" + (spreadIdx + 1) + "左页未找到表格,跳过"); continue; } // 提取单元格内容(行列索引从0开始,比如cells[0][0]是第1行第1列) var modelName = targetTable.cells[0][0].contents.trim(); // 清理非法文件名字符 modelName = modelName.replace(/[\/:*?"<>|]/g, "_"); // 构建导出路径 var pdfPath = File(exportDir.fsName + "/" + modelName + ".pdf"); // 导出PDF try { currentSpread.exportFile(ExportFormat.PDF_TYPE, pdfPath, false, pdfPreset); $.writeln("成功导出:" + modelName + ".pdf"); } catch (err) { $.writeln("跨页" + (spreadIdx + 1) + "导出失败:" + err.message); } } alert("批量导出任务完成!");
使用步骤
- 打开Data Merge生成的InDesign文档,确认每个跨页左页的目标表格位置固定
- 调整脚本中表格定位和单元格索引的代码:
- 如果表格不是页面第一个带表格的文本框,可修改遍历逻辑,比如通过表格的
label属性定位(需提前给表格设置标签) - 调整
targetTable.cells[row][col]的行列索引,匹配实际产品型号所在的单元格
- 替换
[High Quality Print]为你的自定义PDF导出预设名称
- 替换
- 在InDesign中运行脚本,选择导出文件夹即可自动处理
注意事项
- 确保所有跨页左页都存在目标表格,否则脚本会跳过该跨页并在控制台提示
- 产品型号中的特殊字符会被自动替换为下划线,避免文件名报错
- 建议先选择1-2个跨页测试脚本,确认文件名和导出内容无误后再批量处理
内容的提问来源于stack exchange,提问作者Sean Larkin
相关产品推荐
相关产品推荐

