如何使用Ruby将多张图片合并成一个PDF?

5

我有一组图片。如何将它们合并成一个PDF文件,每页只有一张图片?

我已经查看了RGhost和RMagic,答案可能在其中某个地方,但现在它还没有出现。


1
看一下prawn gem。 - Малъ Скрылевъ
2个回答

6
你可以使用RMagick的 ImageList#write 方法:

如果文件名指示的图像格式支持每个文件多个图像(动画图像),则 write 将 imagelist 中的所有图像写入单个文件。

例子:
require 'rmagick'

image_list = Magick::ImageList.new("image1.png", "image2.png", "image3.png")
image_list.write("images.pdf")

那看起来不错 Stefan。只是有一个快速的问题。如果我有一个图像数组,我该如何传递它?这个数组可以转换为 Magick::ImageList.new(['image1.png', 'image2.png']) 但不起作用。如果我将其转换为字符串,我会得到 Magick::ImageList.new("'image1.png','image2.png'") ,这也不起作用。我可能在这里漏掉了一个明显的技巧。 - Simmo
对我来说不起作用,因为我使用了Magick::ImageList.new(["image1.png", "image2.png"]) - Minh Danh
@MinhDanh 你需要传递文件名,而不是数组,即 Magick::ImageList.new('image1.png', 'image2.png') - Stefan
哦,我以为你是在提到通过 Magick::ImageList.new(*array) 创建数组。 - Minh Danh
如果您使用这种方法,它会起作用,但会消耗大量资源,而且如果PDF文件很大,系统会超负荷运行。是否有其他更优化的方式?谢谢。 - undefined
显示剩余4条评论

5

请看prawn宝石。以下是简单示例:

require 'prawn'

Prawn::Document.generate('hello.pdf') do |pdf|
   pdf.text("Hello Prawn!")
   pdf.image "#{Prawn::DATADIR}/images/fractal.jpg", :at => [200, 100]
end

这个宝石太棒了!谢谢。 - Sonastra

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