Ghostscript合并pdf并从合并后的文件中创建目录页

3
我希望根据合并后的文件生成一个包含目录的PDF文件。假设我有以下三个文件:1.pdf、2.pdf和3.pdf。我想创建一个名为toc.pdf的第四个PDF文件,其中包含对不同合并文件的内部链接列表。它应该包含以pdfmark方式在文档中链接到先前文件的列表。 我已经使用Ghostscript命令成功地合并了前三个文件。
gs -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter -dEPSFitPage -o merged.pdf 1.pdf 2.pdf 3.pdf

但我在寻找如何使用内部链接构建文件toc.pdf的选项时失败了。

3个回答

4

步骤1:

gs -o 1_toc.pdf -sDEVICE=pdfwrite -c "[/Title (1.pdf) /OUT pdfmark" -f 1.pdf

gs -o 2_toc.pdf -sDEVICE=pdfwrite -c "[/Title (2.pdf) /OUT pdfmark" -f 2.pdf

gs -o 3_toc.pdf -sDEVICE=pdfwrite -c "[/Title (3.pdf) /OUT pdfmark" -f 3.pdf

第二步:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=toc.pdf 1_toc.pdf 2_toc.pdf 3_toc.pdf

太棒了,你为我节省了一小时的GS研究时间! - pokrovskyy

4

首先,GS和pdfwrite设备并不适用于此目的。

我以前已经解释过这一点,但需要重复说明,因为人们不理解这个系统的工作原理,因此未意识到潜在的风险。当您使用GS处理PDF文件时,您根本没有“合并”文件,而是将其完全解释并分解为一系列图形基元。然后将它们转移到一个“设备”上进行处理,通常将图形渲染为位图,但在pdfwrite的情况下,它将它们重新组合成一个全新的PDF文件。

因此,最终的PDF文件不是通过切割原始文件的部分并重新排列它们来创建的,而是一个全新创建的文件,具有相同的外观。

现在关于您的实际请求。如果您想要这样做,您将不得不手动完成,我认为没有任何工具可以为您完成此操作。

好消息是,GS接受并处理大多数pdfmarks,因此您可以创建一个pdfmark或多个pdfmarks,以执行您想要的操作。当然,您将需要针对每个案例专门制作这些pdfmarks,因为您需要知道组成文件中有多少页的页面编号,这意味着您需要知道每个组件文件中有多少页。

顺便说一句,EPSFitPage开关对于任何非格式良好的EPS文件都没有影响。如果您想要适应PDF文件,请使用PDFFitPage。


1

扩展KenS的答案,来自这篇帖子:https://groups.google.com/d/msg/comp.text.pdf/TslRCZH6x70/X_veyNNMyTcJ

假设1.pdf2.pdf3.pdf都有3页,您可以尝试以下方法:

gs -o out.pdf -sDEVICE=pdfwrite \
  -c "[/Page 1 /View [/XYZ null null null] /Title (file 1.pdf) /OUT pdfmark" \
  -c "[/Page 4 /View [/XYZ null null null] /Title (file 2.pdf) /OUT pdfmark" \
  -c "[/Page 7 /View [/XYZ null null null] /Title (file 3.pdf) /OUT pdfmark" \
  -f merged.pdf

当然,您应该更改/Page后面的数字和/Title括号中的字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接