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

问题描述 投票:8回答:3

我想获取一个PDF文件并将其转换为图像,每个PDF页面都变成一个单独的图像。

Convert a .doc or .pdf to an image and display a thumbnail in Ruby?”是类似的帖子,但没有介绍如何为每一页制作单独的图像。

ruby-on-rails ruby pdf imagemagick rmagick
3个回答
20
投票

ImageMagick可以使用PDF做到这一点。大概RMagick也可以,但我不熟悉。

您链接到的帖子中的代码:

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

pdf是一个ImageList对象,根据documentation,该对象将其许多方法委托给Array。您应该能够遍历pdf并调用write将单个图像写入文件。


57
投票

使用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
投票

由于无法在RMagick中找到处理每页PDF的方法,因此建议您首先使用pdftk's burst命令将PDF分成几页,然后再处理RMagick中的各个页面。这可能比一站式解决方案的性能要差,但不幸的是,没有任何一站式解决方案能够自我展示。

还有Ruby的PDF::Toolkit也可以插入pdftk,但我从未使用过。

© www.soinside.com 2019 - 2024. All rights reserved.