我想生成一个PDF文件,其中包含基于合并文件的内容表。
我们说我有这些文件:1.pdf
,2.pdf
和3.pdf
。
我很想创建第四个PDF文件,其中包含带有指向不同合并文件的内部链接的列表。
我们将其命名为:toc.pdf
。它应该包含以前文件的列表,并在文档上链接pdfmark。
我已成功将前三个文档与 Ghostscript 命令合并:
gs -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter -dEPSFitPage -o merged.pdf 1.pdf 2.pdf 3.pdf
但我没有找到有关如何使用内部链接构建文件toc.pdf
的选项。
答案 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_info
,1.pdf
和2.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