是否将PDF与带有书签的PDFTK合并?

使用pdftk合并多个pdf效果良好。然而,有没有简单的方法为每个合并的pdf创建书签

我在pdftk文档中没有看到任何与此相关的内容,因此我认为pdftk不可能做到这一点

我们合并的所有文件都将是一页,所以想知道是否还有其他实用程序可以在以后添加书签

或者另一个基于linux的pdf实用程序,它允许在为每个pdf指定书签时进行合并

还可以使用Ghostscript合并多个PDF。此路线的最大优点是解决方案易于编写脚本,并且不需要真正的编程工作:

gswin32c.exe^
-dBATCH-dNOPAUSE^
-sDEVICE=pdfwrite^
-sOutputFile=merged.pdf^
[…根据需要提供更多重影脚本选项…]^
input1.pdf input2.pdf input3.pdf[…]

使用Ghostscript,您可以传递pdfmark语句,这些语句可以为生成的PDF中的每个附加源文件添加内容表和书签。例如:

gswin32c.exe^
-dBATCH-dNOPAUSE^
-sDEVICE=pdfwrite^
-sOutputFile=merged.pdf^
[…根据需要提供更多重影脚本选项…]^
文件-with-pdfmarks-to-generate-a-ToC.ps^
-f input1.pdf input2.pdf input3.pdf[…]

gswin32c.exe^
-dBATCH-dNOPAUSE^
-sDEVICE=pdfwrite^
-sOutputFile=merged.pdf^
[…根据需要提供更多重影脚本选项…]^
文件-with-pdfmarks-to-generate-a-ToC.ps^
-f input1.pdf^
input2.pdf^
input3.pdf[…]

有关pdfmark主题的一些介绍,请参见Thomas Merz的《pdfmark初级读本》


编辑:
我本想给大家举一个例子,介绍一下file-with-pdfmarks-to-generate-a-ToC.ps,但不知怎么忘了。这是:

[/Page 1/View[/XYZ null]/Title(文件1)/OUT pdfmark
[/Page 2/View[/XYZ null]/Title(文件2)/OUT pdfmark
[/Page 3/View[/XYZ null]/Title(文件3)/OUT pdfmark
[/Page 4/查看[/XYZ null]/Title(文件4)/OUT pdfmark

这将为前4个文件创建一个ToC==前4页(因为您保证合并输出PDF的每个成分文件都有1页)

  1. [/XYZ null]部分确保当您跟随链接时,您的页面视口和缩放级别不会与当前视口和缩放级别发生更改。(如果您需要任意示例,可以使用[/XYZ 222 111 2]来执行此操作。)
  2. /Title(您想要的一些字符串)thingie确定ToC中的文本

您甚至可以直接将这些参数添加到Ghostscript命令行:

gswin32c.exe^
-o.pdf^
[…根据需要提供更多重影脚本选项…]^
-c“[/Page 1/View[/XYZ null]/Title(文件1)/OUT pdfmark”^
-c“[/Page 2/View[/XYZ null]/Title(文件2)/OUT pdfmark”^
-c“[/Page 3/View[/XYZ null]/Title(文件3)/OUT pdfmark”^
-c“[/Page 4/View[/XYZ null]/Title(文件4)/OUT pdfmark”^
-f input1.pdf^
input2.pdf^
input3.pdf^
input4.pdf[…]


其他编辑:

哦,顺便说一句:当您使用Ghostscript将两个PDF文件合并为一个文件时,它会保留书签–pdftk.exe不会。让我们使用我的第一次编辑命令生成的书签(有效地连接同一文件的两个副本):

gswin32c^
-sDEVICE=pdfwrite^
-o doublemerged.pdf^
merged.pdf^
merged.pdf

文件doublemerged.pdf现在将有2*4=8个书签

  • 正如所料:书签1、2、3和4链接到第1、2、3和4页
  • 问题是,书签5、6、7和8也链接到第1、2、3和4页

原因是,预先存在的书签确实通过绝对页码来寻址其链接目标。要解决这一问题(书签在合并的文件中工作),必须生成按指定目的地指向链接目标的书签(并确保这些书签在合并的文档中是uniq)

(这种方法也适用于linux,只需使用gs而不是gswin32c即可。)


附录

上面的命令行使用[…根据需要使用更多的Ghostscript选项…]作为更多选项的占位符

如果不使用其他选项,Ghostscript将为各种参数应用其内置默认值。但是,这可能会给您带来不喜欢的结果。由于Ghostscript会根据输入生成一个全新的PDF,这意味着某些原始对象可能会被更改。对于颜色空间和图像压缩,这是正确的回归水平

如何应用保持原始嵌入图像不变的参数可以在SuperUser上查看:“使用Ghostscript,但告诉它不要重新处理图像”

发表评论