2013-08-20 27 views
1

我正在尝试生成pdf并将其作为文件发送,或者,更好地,使用imagemagick和wicked_pdf将其作为图像呈现在浏览器中。rails:生成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 
+0

我不明白。为什么你想发送pdf作为图像而不是PDF? – ejosafat

+0

我不想将pdf作为图像发送,而是将其转换为图像并发送给我 –

+0

'Magick :: Image.read(file.path)'适用于我。但是,我真的不明白你的意思。如果您需要的最终结果是来自HTML模板的JPEG文件,则不需要使用'WickedPdf'。建议使用@iwiznia简单使用'IMGKit'。此外,您还没有使用“WickedPdf”即时生成PDF文件。 – j03w

回答

1

如果你的目标是有一个形象,我想你可以跳过pdf的东西alltoghether,没有意义,首先将其转换为PDF然后再转换为图像。 看看IMGKit,它允许从一个html字符串生成一个图像。

+0

但我确实有pdf。 –

+0

嗯,我不知道如何将pdf转换为图像,但是您可以同时拥有您已经生成的pdf和使用IMGKit生成的图像 – iwiznia

4

看看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,其中显示 类似的例子机智h将多帧gif转换为多个PNG

+0

+1可以使用[length](http ://studio.imagemagick.org/RMagick/doc/ilist.html#length)和[蒙太奇](http://studio.imagemagick.org/RMagick/doc/ilist.html#montage)选项来创建单个图像,例如'pdf = Magick :: ImageList.new('doc.pdf'); m = pdf.montage; m.tile =“1x#{pdf.length}”; m.write( 'doc.pdf.montage.jpg')'。这也是未经测试的代码。 –