【问题标题】:Is it possible to combine a series of PDFs into one using Ruby?是否可以使用 Ruby 将一系列 PDF 合并为一个?
【发布时间】:2010-09-10 06:30:49
【问题描述】:

我有一系列按顺序命名的 PDF,如下所示:

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf

使用 Ruby,是否可以将它们组合成一个大的 PDF,同时保持它们的顺序?我不介意安装任何必要的 gem 来完成这项工作。

如果这在 Ruby 中是不可能的,那么另一种语言呢?如果可能,不要使用商业组件。


更新: Jason Navarrete's suggestion 带来完美解决方案:

将需要合并的 PDF 文件与 pdftk 一起放在一个目录中(或确保 pdftk 在您的 PATH 中),然后运行以下脚本:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ")
`pdftk #{pdfs} output combined.pdf`

或者我什至可以从命令行以单行方式执行:

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`'

杰森的好建议,完美的解决方案,谢谢。 给他一个支持的人

【问题讨论】:

    标签: ruby pdf


    【解决方案1】:

    我尝试了 pdftk 解决方案,但在 SnowLeopard 和 Tiger 上都遇到了问题。在 Tiger 上安装实际上对我的系统造成了严重破坏,让我无法运行脚本/服务器,幸运的是它是一台从 Web 开发中退役的机器。

    后来又找到了另一个选项:-joinPDF。绝对是无痛且快速的安装,并且运行良好。

    还尝试了 GhostScript,但它失败了(无法读取字体,我最终得到了只有图像的 PDF)。

    但是,如果您正在寻找解决此问题的方法,您可能想尝试 joinPDF。

    【讨论】:

      【解决方案2】:

      如果你的平台上有ghostscript,请退出并执行以下命令:

      gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf

      【讨论】:

      • gs 的 -sPAPERSIZE 选项很有用。例如 -sPAPERSIZE=a4 或 -sPAPERSIZE=letter。
      【解决方案3】:

      在实际应用程序中执行此操作的任何 Ruby 代码都可能会非常缓慢。我会尝试寻找 unix 工具来完成这项工作。这是使用 Mac OS X 的优点之一,它内置了非常快速的 PDF 功能。下一个最好的东西可能是一个 unix 工具。

      实际上,我在 rtex 方面取得了一些成功。如果您查看here,您会发现一些有关它的信息。它比我用过的任何 Ruby 库都快得多,而且我很确定 latex 具有从其他来源引入 PDF 数据的功能。

      【讨论】:

        【解决方案4】:

        Ruby-Talk 帖子建议使用 pdftk 工具包来合并 PDF。

        pdftk 作为外部进程调用并让它处理合并应该相对简单。 PDF::Writer 可能有点矫枉过正,因为您想要完成的只是一个简单的追加。

        【讨论】:

        • 谢谢,我以前从未遇到过 pdftk。多么棒的工具!
        【解决方案5】:

        我建议查看使用 GhostScript(GNU 许可证)的 PDFCreator 的代码(VB,如果我没记错的话,但这没关系,因为您只是用另一种语言实现类似的代码) .或者直接深入研究 GhostScript 本身;还有一个名为 GhostPDF 的外观层可用,它可以做你想做的事。

        如果你可以用 VB 控制 GhostScript,那么你可以用 C 来控制,这意味着你可以用 Ruby 来控制。

        Ruby 还具有 IO.popen,它允许您调用可以执行此操作的外部程序。

        【讨论】:

          【解决方案6】:

          您可以通过转换为 PostScript 并返回来做到这一点。 PostScript 文件可以简单地连接起来。例如,这是一个使用 Ghostscript 工具 ps2pdf 和 pdf2ps 的 Bash 脚本:

          #!/bin/bash 用于 01_foo.pdf 02_bar.pdf 03_baz.pdf 中的文件;做 pdf2ps $file - >> temp.ps 完毕 ps2pdf temp.ps output.pdf rm温度.ps

          我不熟悉 Ruby,但几乎可以肯定有一些函数(可能称为 system()(只是猜测))会调用给定的命令行。

          【讨论】:

            【解决方案7】:

            我不认为 Ruby 有这方面的工具。您可以查看 ImageMagick 和 Cairo。 ImageMagick 可用于将多张图片/文档绑定在一起,但我不确定 PDF 的情况。

            再说一次,肯定有 Windows 工具(商业)可以做这种事情。

            我自己使用 Cairo 来生成 PDF。如果 PDF 来自您,也许这将是一个解决方案(它确实支持多个页面)。祝你好运!

            【讨论】:

            • 感谢您的建议。我们确实使用各种工具来创建甚至合并 PDF。然而,人们不能轻易地将它们自动化,尤其是进行组合的工具,因此需要用 Ruby(或其他语言)编写脚本。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-03-28
            • 2015-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-07
            相关资源
            最近更新 更多