如何使用RMagick和Ruby将PDF文件转换为图像

8
3个回答

58

使用RMagick本身,您可以为不同的页面创建图像:

require 'RMagick'
pdf_file_name = "test.pdf"
im = Magick::Image.read(pdf_file_name)

以上代码将为您提供一个数组arr [],其中每个页面都有一个条目。如果您想生成第五页的JPEG图像,请执行以下操作:

im[4].write(pdf_file_name + ".jpg")

但是这样会加载整个PDF,可能会很慢。

另一个选择是,如果你想创建第五页的图像,并且不想加载完整的PDF文件:

require 'RMagick'
pdf_file_name = "test.pdf[5]"
im = Magick::Image.read(pdf_file_name)
im[0].write(pdf_file_name + ".jpg")

2
感谢您关于路径中索引的提示!即使它是一个不太正规的技巧,但效果非常好;) - SciPhi
7
这很棒,但我陷入了很长时间的困境,因为我不知道我还需要“brew install ghostscript”才能让阅读器返回不止一个空数组。如果你是OSX用户,它可能也不是标准配置的。 - Matthew Du Pont
如果在OSX上安装RMagick时遇到问题,请阅读此内容以正确安装。http://blog.paulopoiati.com/2013/01/28/installing-rmagick-in-mac-os-x-mountain-lion-with-homebrew/ - Nick N
对我来说不起作用。在我的情况下,“im”始终是一个空数组。这取决于PDF吗? - Hendrik
1
感谢@MatthewDuPont。在安装ghostscript之前,我一直得到空数组。 - Simmi Badhan

22

ImageMagick可以处理PDF文件。 RMagick也可能可以,但我不太熟悉它。

您链接的帖子中的代码:

require 'RMagick'
pdf = Magick::ImageList.new("doc.pdf")

pdf 是一个 ImageList 对象,根据文档的说明,它将许多方法委托给 Array。你可以遍历 pdf 并调用 write 将单个图像写入文件。


毫无疑问... 我只是想知道是否有人有一些示例代码。 - tybro0103

2
由于我无法找到一种在RMagick中按页面处理PDF的方法,因此我建议首先使用pdftk的burst命令将PDF拆分为单个页面,然后再在RMagick中处理每个页面。这可能不如一体化解决方案高效,但不幸的是没有一体化解决方案可以出现。

还有一个名为PDF::Toolkit的Ruby工具包,它连接到pdftk,但我从未使用过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接