将PDF与GhostScript结合使用:使用带有更正页码的原始书签

DrS*_*SAR 7 pdf pdf-generation ghostscript

我在用

gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=book.pdf  -f front-matter.pdf fulltext-0.pdf fulltext-1.pdf back-matter.pdf
Run Code Online (Sandbox Code Playgroud)

从一系列pdf文档创建单个PDF文档.我打算包含一个新的内容表,并使用pdfmark机制包含它.然后我注意到原始文件中已经有书签 - 但它们是引用原始页码而不是组合文档中的页码.

我正在寻找两种可能的解决方案.删除原始书签或使用原始书签,但以某种方式更新其页面引用...

DrS*_*SAR 4

通常情况下,有人在你之前走过同样的路......

正在发生的灾难已经找到了解决这个问题的办法。他的python 脚本 pdf-merge.py首先调用pdftkdump_data开关来检索所有 pdfmark 信息。然后,它会跟踪每个合并文档的总页数,并进行数学计算,将 pdfmark 指令中的新页码指针偏移当前 PDF 文档之前包含的所有 PDF 文档的页数总和。所以它与 KenS 的 2-pass 方法很接近,但不一样。它首先使用 pdftk 发现书签,然后创建一个具有正确页码的新书签文件。它还设法将原始 pdfmark 指令(通常由 gs 保留为 noop)。我不会假装我理解最后一部分是如何运作的......

然而,该脚本完成了我需要的一切,包括在最终写入之前调整书签文件的选项。非常整洁,向特雷弗·金致敬。