我想获取一个 PDF 文件并将其转换为图像,每个 PDF 页面都成为一个单独的图像。
“将 .doc 或 .pdf 转换为图像并在 Ruby 中显示缩略图? ”是一篇类似的帖子,但它没有介绍如何为每个页面制作单独的图像。
我想获取一个 PDF 文件并将其转换为图像,每个 PDF 页面都成为一个单独的图像。
“将 .doc 或 .pdf 转换为图像并在 Ruby 中显示缩略图? ”是一篇类似的帖子,但它没有介绍如何为每个页面制作单独的图像。
使用 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")
ImageMagick可以用 PDF 做到这一点。大概RMagick也可以做到,但我不熟悉它。
您链接到的帖子中的代码:
require 'RMagick'
pdf = Magick::ImageList.new("doc.pdf")
pdf
是一个ImageList
对象,根据文档,它的许多方法委托给Array
. 您应该能够迭代pdf
并调用write
以将单个图像写入文件。
由于我无法在 RMagick 中找到以每页为基础处理 PDF 的方法,我建议首先使用pdftk 的 burst
命令将 PDF 拆分为页面,然后在 RMagick 中处理各个页面。这可能不如多合一解决方案的性能,但不幸的是,没有多合一解决方案出现。
还有用于 Ruby 的PDF::Toolkit与 pdftk 挂钩,但我从未使用过它。