Ghostscript合并pdf并从合并文件创建内容页面表

时间:2014-02-06 19:48:03

标签: pdf merge ghostscript tableofcontents

我想生成一个PDF文件,其中包含基于合并文件的内容表。

我们说我有这些文件:1.pdf2.pdf3.pdf

我很想创建第四个PDF文件,其中包含带有指向不同合并文件的内部链接的列表。

我们将其命名为:toc.pdf。它应该包含以前文件的列表,并在文档上链接pdfmark。

我已成功将前三个文档与 Ghostscript 命令合并:

gs -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter -dEPSFitPage -o merged.pdf 1.pdf 2.pdf 3.pdf

但我没有找到有关如何使用内部链接构建文件toc.pdf的选项。

3 个答案:

答案 0 :(得分:2)

好的第一点; GS和pdfwrite设备不适用于此目的。

我之前已经解释过这个问题,但是它重复了,因为人们不理解这个系统是如何工作的,因此不知道潜在的陷阱。您根本没有“合并”文件,当您使用GS处理PDF文件时,它会被完全解释并分解为一系列图形基元。然后将这些转移到处理它们的“设备”,通常这会将图形呈现为位图,但在pdfwrite的情况下,它会将它们重新组合成全新的 PDF文件。

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

现在你的实际要求。如果你想这样做,你将不得不手动完成,我认为没有任何工具可以为你做这件事。

好消息是GS 接受并处理大多数pdfmarks,因此您可以创建一个pdfmark或一系列pdfmark,它们可以满足您的需求。当然,您将不得不为每种情况专门制作这些,因为您需要知道最终文件中的页码作为pdfmark的一部分,这意味着知道每个组件文件中有多少页。

顺便说一下,EPSFitPage开关对任何不是格式良好的EPS文件的输入都没有影响。如果要拟合PDF文件,请使用PDFFitPage。

答案 1 :(得分:0)

通过以下帖子扩展KenS答案:https://groups.google.com/d/msg/comp.text.pdf/TslRCZH6x70/X_veyNNMyTcJ

假设utter_request_info1.pdf2.pdf都有3页,您可以尝试:

3.pdf

当然,你应该在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之后括号中的字符串进行混淆。

答案 2 :(得分:0)

步骤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

第2步:

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