2015-05-07 28 views
6

我想生成一個帶有我們部門標識的PDF。當我嘗試使用我的控制器的WickedPdf類(使用在https://github.com/mileszs/wicked_pdf描述的方法):Wicked-PDF未顯示圖像,'wicked_pdf_image_tag'undefined

def some_action 
    image_tag_string = image_tag('logo.jpg') 
    pdf = WickedPdf.new.pdf_from_string(image_tag_string) 

    save_path = Rails.root.join('testpdfs','logotest.pdf') 
    File.open(save_path, 'wb') do |file| 
    file << pdf 
    end 
end 

...的應用程序保存PDF到目標目錄,但它有一個藍色和白色「 ?標記圖像應該在哪裏。

如果我這樣做,而不是:

image_tag_string = wicked_pdf_image_tag('logo.jpg') 
    pdf = WickedPdf.new.pdf_from_string(image_tag_string) 

我收到以下錯誤:

NoMethodError: 
    undefined method `wicked_pdf_image_tag' for #<... 

這樣看來,我的Rails應用程序也不見了/沒有連接到屬於一個幫助文件邪惡-PDF寶石。

對StackOverflow上類似問題的回答建議編寫一個自定義的「圖像標籤」助手來定位圖像或安裝wkhtmltopdf。對我來說,放置在視圖(whatever.html.erb)中時,image-tag會顯示徽標。 「logo.jpg」已經位於資產管道和#{RailsRoot}/public/images中。最後,我在Ubuntu 14.04上使用了wkhtmltopdf 0.9.9,wicked-pdf 0.11.0和rails 4。

簡而言之 - 我做錯了什麼導致WickedPDF無法呈現圖像?

+0

'wicked_pdf_image_tag'是一個輔助方法,因此它應該在的意見,或其他幫助使用。發佈更多關於您的實施的信息。 –

+0

什麼信息會有用?目前,我使用測試頁上的按鈕來觸發上述方法控制器#some_action。我在Rspec3中編寫了一個包含相同代碼的測試,並且在運行它時執行了相同的操作 - 構建PDF,保存它,在圖像應該放置的位置放置問號。 – NewbieOnRails

+1

正如我所說的,'wicked_pdf_image_tag'是一個輔助方法,所以在控制器操作中它不能被使用(至少它不應該)。您應該查看,放置圖像的位置,然後使用該視圖生成pdf。但要長話短說 - 對於wicked_pdf,圖像路徑需要是完整的絕對路徑,具有完整的文件系統路徑或完整的url(帶有域和協議)。我會試着想出一些簡單的例子,並將其發佈在這裏(除非有人擊敗我)。 –

回答

12

第一件事就是創建一個PDF模板渲染和在模板中使用您的wicked_pdf標籤.. 的示例 -

應用程序/視圖/佈局/ application.pdf.erb-

<!doctype html> 
<html> 
    <head> 
    <meta charset='utf-8' /> 
    </head> 
    <body onload='number_pages'> 
    <div id="content"> 
     <%= yield %> 
    </div> 
    </body> 
</html> 

應用/views/pdf/pdf_view.pdf.erb-

<div> 
    <%= wicked_pdf_image_tag 'logo.jpg' %> 
</div> 

使用這個模板代替

def save 
    pdf = WickedPdf.new.pdf_from_string(
         render_to_string(
          template: 'example/pdf_view.pdf.erb', 
          layout: 'layouts/application.pdf.erb')) 
    send_data(pdf, 
      filename: 'file_name.pdf', 
      type: 'application/pdf', 
      disposition: 'attachment') 
end 

這可以幫助你..