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

时间:2020-03-05 18:59:26  来源:igfitidea点击:

我有一系列依次命名的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`'

很棒的建议杰森,完美的解决方案,谢谢。给他一个有投票权的人。

解决方案

回答

我认为Ruby没有为此提供工具。我们可以检查ImageMagick和Cairo。 ImageMagick可用于将多个图片/文档绑定在一起,但是我不确定PDF的情况。

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

我自己使用Cairo生成PDF。如果PDF是由我们提供的,则可能是一种解决方案(它确实支持多页)。祝你好运!

回答

我们可以通过转换为PostScript并返回来完成此操作。 PostScript文件可以很容易地串联在一起。例如,这是一个使用Ghostscript工具ps2pdf和pdf2ps的Bash脚本:

#!/bin/bash
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do
    pdf2ps $file - >> temp.ps
done

ps2pdf temp.ps output.pdf
rm temp.ps

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

回答

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

如果可以用VB控制GhostScript,则可以用C进行控制,这意味着可以用Ruby进行控制。

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

回答

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

将pdftk称为外部进程并让其处理合并应该相对简单。 PDF :: Writer可能会过大,因为我们要完成的只是一个简单的追加。

回答

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

实际上,我在rtex上取得了一些成功。如果我们在这里查看,我们会发现一些有关它的信息。它比我使用过的任何Ruby库都快得多,而且我敢肯定,latex具有从其他来源导入PDF数据的功能。

回答

如果平台上有ghostscript,请掏出外壳并执行以下命令:

gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = finished.pdf <原始pdf文件>

回答

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

随后找到了另一个选择:joinPDF。绝对轻松快捷地安装,并且完美运行。

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

但是,如果我们正在寻找解决此问题的方法,则可以尝试使用joinPDF。