使用Ghostscript合并PDF时如何调整现有书签的层级结构?
可以通过Ghostscript实现该需求,不需要从零编写完整的书签树,具体操作方法如下:
操作步骤
1. 提取单篇PDF的原有书签
调用Ghostscript自带的pdf_info.ps脚本即可导出单篇PDF的原生书签(pdfmarks格式):
gswin32.exe -q -dNODISPLAY -dPrinted=false -sFile=xxx.info xxx.pdf -f [Ghostscript安装路径]/lib/pdf_info.ps
输出的xxx.info文件包含该PDF所有书签的层级、跳转目标、展示标题等完整信息。
2. 调整书签结构,挂靠到自定义顶级书签
为每篇PDF的书签片段做两处批量修改即可:
- 新增该篇PDF对应的顶级书签定义,示例如下:
其中[ /Title (文章A的标题) /Page 1 /Count 5 /OUT pdfmarkPage填该篇PDF在合并后文件中的起始页码,Count填该篇PDF的原有书签总数量(书签默认展开填正值,默认折叠填负值)。 - 把导出的原书签字段里的
/Level值统一加1,即可把所有原书签挂靠到刚才新增的顶级书签下;同时把所有原书签的Page值加上该篇PDF的页码偏移量(比如第一篇共12页,第二篇的所有书签页码都要加12)。
3. 合并PDF时加载整理好的书签文件
把所有调整后的书签片段汇总到同一个文件(比如命名为merge_bookmarks),在原合并命令中新增-dDOPDFMARKS参数并加载该书签文件即可:
gswin32.exe -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -dDOPDFMARKS -sOutputFile=o.pdf a.pdf b.pdf merge_bookmarks
如果需要合并的PDF数量较多,可以写简单的脚本自动完成书签提取、层级和页码的批量修改,无需手动操作。
内容的提问来源于stack exchange,提问作者Crafty Cat
相关产品推荐
相关产品推荐

