【发布时间】:2011-02-27 19:14:22
【问题描述】:
我想获取一个 PDF 文件并将其转换为图像,每个 PDF 页面都成为一个单独的图像。
“Convert a .doc or .pdf to an image and display a thumbnail in Ruby?”是类似的帖子,但没有介绍如何为每个页面制作单独的图像。
【问题讨论】:
标签: ruby-on-rails ruby pdf imagemagick rmagick
我想获取一个 PDF 文件并将其转换为图像,每个 PDF 页面都成为一个单独的图像。
“Convert a .doc or .pdf to an image and display a thumbnail in Ruby?”是类似的帖子,但没有介绍如何为每个页面制作单独的图像。
【问题讨论】:
标签: ruby-on-rails ruby pdf imagemagick rmagick
ImageMagick 可以用 PDF 做到这一点。想必RMagick也可以,只是我不熟悉。
您链接到的帖子中的代码:
require 'RMagick'
pdf = Magick::ImageList.new("doc.pdf")
pdf 是一个ImageList 对象,根据documentation,它的许多方法委托给Array。您应该能够遍历 pdf 并调用 write 将单个图像写入文件。
【讨论】:
由于我无法在 RMagick 中找到按页处理 PDF 的方法,我建议首先使用 pdftk's burst 命令将 PDF 拆分为多个页面,然后在魔术师。这可能不如多合一解决方案的性能,但不幸的是没有多合一解决方案出现。
还有 PDF::Toolkit 用于 Ruby,它与 pdftk 挂钩,但我从未使用过。
【讨论】:
使用 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")
【讨论】:
im 在我的情况下始终是一个空数组。它依赖于 PDF 吗?