2015-04-07 69 views
3

我正在嘗試使用邪惡的pdf來呈現PDF格式的html頁面。Rails 4 wicked pdf問題

mime_types.rb

Mime::Type.register "application/pdf", :pdf 

控制器方法

def invoice  
    respond_to do |format| 
     format.html 
     format.pdf do 
     render pdf: "invoice" 
     end 
    end 
end 

wicked_pdf.rb

:exe_path => '/usr/local/bin/wkhtmltopdf' 

invoice.pdf.erb

<div id="test_pdf"> 
    test data 
</div> 

我已經添加了上面的代碼,並將以下寶石添加到我的項目中。

gem 'wicked_pdf' 
gem 'wkhtmltopdf-binary' 

當我嘗試渲染頁面時,出現Template is missing錯誤。如果我將invoice.pdf.erb重命名爲invoice.html.erb我可以繞過該錯誤,但我將獲得一個html頁面而不是pdf。

我想念什麼?

回答

3

正如文件wicked_pdf所述,您可以像這樣使用它。它是自我解釋的。不要忘了創建「PDF文件」目錄

# or from your controller, using views & templates and all wicked_pdf options as normal 
    pdf = render_to_string pdf: "some_file_name", template: "templates/pdf.html.erb", encoding: "UTF-8" 

# then save to a file 
save_path = Rails.root.join('pdfs','filename.pdf') 
File.open(save_path, 'wb') do |file| 
    file << pdf 
end 

send_file save_path, :type=>'text/pdf 
+0

非常感謝archit。它的工作.. –

+0

也爲我工作..謝謝 –

1

此代碼將是綽綽有餘,如果你只是想顯示PDF:

def show 
    respond_to do |format| 
    format.html 
    format.pdf do 
     render pdf: 'file_name', 
      template: 'example/pdf_view.pdf.erb', 
      layout: 'layouts/application.pdf.erb' 
    end 
    end 
end 

如果你想保存爲PDF格式:

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