Rails 4 wicked pdf Issue

时间:2015-04-07 04:53:34

标签: ruby-on-rails ruby pdf wkhtmltopdf wicked-pdf

我正在尝试使用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 'wicked_pdf'
gem 'wkhtmltopdf-binary'

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

我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

wicked_pdf文档中所述,您可以像这样使用它。它自我解释。不要忘记创建&#34; pdfs&#34;目录

# 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

答案 1 :(得分: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