Rails 4个邪恶的pdf问题

Rails 4 wicked pdf Issue

我正在尝试使用 wicked pdf 将 html 页面呈现为 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。

gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'

当我尝试呈现页面时,出现 Template is missing 错误。如果我将 invoice.pdf.erb 重命名为 invoice.html.erb 我可以绕过错误,但我将得到一个 html 页面而不是 pdf。

我错过了什么吗?

wicked_pdf的文档中有提到,可以这样使用。它不言自明。不要忘记创建 "pdfs" 目录

# 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

如果您只想渲染 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