2008-09-17 49 views
10

我有一个顺序命名,像这样一系列的PDF:是否可以使用Ruby将一系列PDF合并为一个PDF?

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.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`' 

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

回答

14

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

pdftk作为外部进程调用并处理合并应该相对简单。 PDF :: Writer可能会过度杀伤,因为你想要完成的只是一个简单的附加。

+0

谢谢,我以前从未遇到过pdftk。多么棒的工具! – 2008-09-21 16:04:03

0

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

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

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

+1

谢谢你的建议。我们确实使用各种工具来创建和组合PDF。但是,不能轻易自动化它们,尤其是组合工具,因此希望用Ruby(或其他语言)编写脚本。 – 2008-09-17 17:23:39

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 

我不熟悉的红宝石,但几乎可以肯定的一些功能(可称为system()(只是猜测)),将调用给定的命令行。

0

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

如果你可以用VB控制GhostScript,你可以用C来完成,这意味着你可以用Ruby来完成它。

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

-1

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

其实我用rtex取得了一些成功。如果你看看here,你会发现一些关于它的信息。它比我使用过的任何Ruby库快得多,我敢肯定,latex有一个函数可以从其他来源获取PDF数据。

2

如果您的Ghostscript你的平台上,掏出并执行以下命令:

GS -dBATCH -dNOPAUSE -q -sDEVICE = pdfwrite -sOutputFile = finished.pdf <源PDF文件>

+0

gs的-sPAPERSIZE选项是一个很有用的知识。例如-sPAPERSIZE = a4或-sPAPERSIZE =字母。 – 2009-04-29 07:58:28

2

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

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

也尝试了GhostScript,它失败了(无法读取字体,我结束了只有图像的PDF文件)。

但是,如果你正在寻找解决这个问题的办法,你可能想尝试joinPDF。

相关问题