将 PDF 与 Ghostscipt 合并,忽略大纲并改用 pdfmark

merging PDFs with Ghostscipt ignoring outline and using pdfmark instead

我正在使用批处理脚本将不同的 PDF 合并到一个完整的文件中。

 %gsc% -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter -dEPSFitPage -o  %dsk%%zus%%ext% %mfd% %pth%tmp\pdfmarks

 %dsk%%zus%%ext%: Path and name of final (complete) document

 %mfd%: Path and name of docs to be merged (c:\test.pdf c:\test.pdf ...)

 %pth%tmp = path to the pdfmarks file

此外,我正在 gs 用于创建书签的脚本中创建一个 pdfmark 文档。但不幸的是,我正在合并的一些文档已经有了自己的书签,我还没有找到如何忽略这些书签的解决方案。 GS 应该只使用 pdfmarks 文件中的书签。

如何做到这一点?

首先;当您使用 Ghotscript 的 pdfwrite 设备时,您不是 'merging' 个 PDF 文件。过程描述的很详细here

重要的一点是输入文件的构建方式与输出文件的构建方式无关。如果您使用的任何其他软件依赖于以特定方式构建的文件,它可能无法处理输出的 PDF 文件。

-dEPSFitPage开关在输入为EPS文件时有效。如果您想要 'fit' PostScript 或 PDF 文件,那么您需要使用 -dPDFFitPage-dPSFitPage 或只是 -dFitPage。然而,所有这些都依赖于您首先选择媒体大小,然后通过设置 -dFIXEDMEDIA 来防止它被更改。对于 EPS 文件,您通常会使用 -dEPSCrop,它将媒体大小设置为 EPS 声明的 BoundingBox。

您可以阻止 PDF 解释器读取大纲树(您称之为书签),然后使用 -dNO_PDFMARK_OUTLINES 开关从中创建一个 pdfmark 以传递给 pdfwrite 设备,奇怪的是没有记录,大概是一个疏忽。