【问题标题】:Ghostscript Merge pdf and create table of content page from merged filesGhostscript Merge pdf 并从合并的文件创建目录页面
【发布时间】:2014-03-03 23:12:57
【问题描述】:

我想根据合并的文件生成一个带有目录的 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 的选项。

【问题讨论】:

    标签: pdf merge ghostscript tableofcontents


    【解决方案1】:

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

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

    所以最终的 PDF 文件不是通过将原始文件的位切碎并重新排列来创建的,它是一个完全新创建的文件,具有相同的外观。

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

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

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

    【讨论】:

      【解决方案2】:

      第 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
      

      【讨论】:

      • 太棒了。你为我节省了一个小时的 GS 研究!
      【解决方案3】:

      扩展 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 后面括号中的字符串你应该改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多