【问题标题】:rails: produce pdf and render it as imagerails:生成pdf并将其呈现为图像
【发布时间】:2013-08-20 08:37:14
【问题描述】:

我正在尝试生成 pdf 并将其作为文件发送,或者更好的是,使用 imagemagick 和 wicked_pdf 在浏览器中将其呈现为图像。

我可以发送某些内容,但操作系统无法将其识别为图像。 pdf字符串生成正确,所以我想问题出在图像部分

这是我的控制器的代码:

  format.jpg do
    @format = :pdf

    pdfstr =  render_to_string 'generated_graphics/tag.erb', :pdf => "tag", :layout => nil, :page_height => '38mm', :page_width => '129mm'

    file = Tempfile.new('foo')
    file.write pdfstr
    file.close

    require 'RMagick'  
    pdf = Magick::ImageList.new(file.path)
    send_data pdf.write("myimage.jpg"), :type => 'image/jpg'
  end

【问题讨论】:

  • 我不明白。为什么要将 pdf 作为图像而不是 pdf 发送?
  • 我不想将pdf作为图片发送,而是将其转换为图片发送
  • Magick::Image.read(file.path) 为我工作。但是,我真的不明白你的意思。如果您需要的最终结果是来自您的 HTML 模板的 JPEG 文件,那么您无需使用WickedPdf。只需按照@iwiznia 的建议使用IMGKit。另外,您没有使用WickedPdf动态生成的PDF文件。

标签: ruby-on-rails imagemagick rmagick wicked-pdf


【解决方案1】:

看看用于 ruby​​ 的 imagemagick 和 rmagick 插件。这允许您进行各种图像转换,包括 PDF 到 jpeg。

http://rmagick.rubyforge.org/

编辑:

未经测试的示例代码:

require 'RMagick' 

pdf = Magick::ImageList.new("doc.pdf")
pdf.write("myimage.jpg") 

如果 doc.pdf 有 3 页,则应输出 3 张图像:myimage.jpg.0 myimage.jpg.1 myimage.jpg.2

查看文档on this page 的末尾,其中显示 一个类似的例子,将多帧 gif 转换为多个 PNG

【讨论】:

  • +1 可能使用length 和montage 选项来创建单个图像,例如pdf = Magick::ImageList.new('doc.pdf'); m = pdf.montage; m.tile = "1x#{pdf.length}"; m.write('doc.pdf.montage.jpg')。这也是未经测试的代码。
【解决方案2】:

如果您的目标是制作图像,我认为您可以完全跳过 pdf 的内容,那么先将其转换为 pdf 然后再转换为图像是没有意义的。 看看IMGKit,它允许从 html 字符串生成图像。

【讨论】:

  • 好吧,我不确定如何将 pdf 转换为图像,但您可以同时拥有已生成的 pdf 和使用 IMGKit 生成的图像
猜你喜欢
  • 2015-08-17
  • 2022-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多