我有一系列按顺序命名的PDF:
使用Ruby,是否可以将这些组合成一个大的PDF,同时保持它们的顺序?我不介意安装任何必要的宝石来完成这项工作。
如果在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`'
很好的建议杰森,完美的解决方案,谢谢。 给他一个投票的人。
答案 0 :(得分:14)
Ruby-Talk帖子建议使用 pdftk 工具包合并PDF。
将 pdftk 作为外部进程调用并让它处理合并应该相对简单。 PDF :: Writer 可能有点过分,因为你想要完成的只是一个简单的追加。
答案 1 :(得分:2)
您可以通过转换为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()
(只是猜测))会调用给定的命令行。
答案 2 :(得分:2)
如果您的平台上有ghostscript,请执行以下命令并执行此命令:
gs -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = finished.pdf< your source pdf files>
答案 3 :(得分:2)
我尝试了pdftk解决方案并且在SnowLeopard和Tiger上都遇到了问题。在Tiger上安装实际上对我的系统造成了严重破坏,让我无法运行脚本/服务器,幸运的是,这是一台从Web开发中退出的机器。
随后找到另一个选项: - joinPDF。是一个绝对无痛和快速安装,它的工作完美。
还尝试了GhostScript,它失败了(无法读取字体,我最终得到了只有图像的PDF)。
但是,如果您正在寻找此问题的解决方案,您可能想尝试joinPDF。
答案 4 :(得分:0)
我不认为Ruby有这方面的工具。你可以查看ImageMagick和Cairo。 ImageMagick可用于将多张图片/文档绑定在一起,但我不确定PDF格式。
然后,肯定有Windows工具(商业)可以做这种事情。
我自己使用Cairo来生成 PDF。如果PDF来自你,也许这将是一个解决方案(它确实支持多个页面)。祝你好运!
答案 5 :(得分:0)
我建议查看PDFCreator的代码(VB,如果我没有弄错,但这应该不重要,因为你只是用另一种语言实现类似的代码),它使用GhostScript(GNU许可证) 。或者直接挖掘GhostScript本身;还有一个名为GhostPDF的外观层,它可以做你想要的。
如果你可以用VB控制GhostScript,你可以用C来做,这意味着你可以用Ruby来做。
Ruby还有IO.popen,它允许你调用可以执行此操作的外部程序。
答案 6 :(得分:-1)
任何在真实应用程序中执行此操作的Ruby代码可能会非常缓慢。我会尝试寻找unix工具来完成这项工作。这是使用Mac OS X的优点之一,它内置了非常快的PDF功能。下一个最好的事情可能是unix工具。
实际上,我在rtex方面取得了一些成功。如果您查看here,您会找到有关它的一些信息。它比我使用的任何Ruby库快得多,我非常确定latex有一个从其他来源引入PDF数据的功能。