是否可以使用Ruby将一系列PDF合并为一个?

我有一系列像这样顺序命名的PDF:

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

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

如果在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`' 

伟大的建议杰森,完美的解决方案,谢谢。 给他一个投票的人

Ruby-Talkpost建议使用pdftk工具包合并PDF。

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

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

 #!/斌/庆典
 for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; 做
     pdf2ps $ file  -  >> temp.ps
 DONE

 ps2pdf temp.ps output.pdf
 rm temp.ps

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

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

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

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

随后找到了另一个选项: – joinPDF。 是一个绝对无痛和快速安装,它的工作完美。

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

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

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

然后,肯定有Windows工具(商业)来做这种事情。

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

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

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

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

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

实际上,我在rtex方面取得了一些成功。 如果你看这里,你会发现一些有关它的信息。 它比我使用的任何Ruby库快得多,我非常确定latex有一个从其他来源引入PDF数据的function。