10

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

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

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

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


更新: Jason Navarrete 的建议带来了完美的解决方案:

将需要合并的 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`'

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

4

7 回答 7

14

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

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

于 2008-09-17T17:28:59.197 回答
2

您可以通过转换为 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()(只是猜测))会调用给定的命令行。

于 2008-09-17T17:23:16.120 回答
2

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

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf <您的源 pdf 文件>

于 2009-03-14T20:22:29.137 回答
2

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

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

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

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

于 2009-09-17T03:11:35.193 回答
0

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

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

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

于 2008-09-17T17:14:34.253 回答
0

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

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

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

于 2008-09-17T17:28:13.317 回答
-1

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

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

于 2008-09-18T07:40:55.763 回答