2013-08-20 62 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')'。這也是未經測試的代碼。 –