无法在rails中使用wicked_pdf gem生成pdf?

时间:2016-12-14 14:30:03

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

我正在尝试使用pdf应用中的wicked_pdf gem生成rails。我在我的文件中有以下代码。

gemfile

 gem 'wicked_pdf'
 gem 'wkhtmltopdf-binary'

和config / initializers / wicked_pdf.rb文件

WickedPdf.config = {
  # Path to the wkhtmltopdf executable: This usually isn't needed if using
  # one of the wkhtmltopdf-binary family of gems.
  # exe_path: '/usr/local/bin/wkhtmltopdf',
  #   or
  # exe_path: Gem.bin_path('wkhtmltopdf-binary', 'wkhtmltopdf')

  # Layout file to be used for all PDFs
  # (but can be overridden in `render :pdf` calls)
  # layout: 'pdf.html',
}
  module WickedPdfHelper
  if Rails.env.development?
    if RbConfig::CONFIG['host_os'] =~ /linux/
      executable = RbConfig::CONFIG['host_cpu'] == 'x86_64' ?
'wkhtmltopdf_linux_x64' : 'wkhtmltopdf_linux_386'
    elsif RbConfig::CONFIG['host_os'] =~ /darwin/
      executable = 'wkhtmltopdf_darwin_386'
    else
      raise 'Invalid platform. Must be running linux or intel-based Mac OS.'
    end

    WickedPdf.config = { exe_path:
"#{Gem.bin_path('wkhtmltopdf-binary').match(/(.+)\/.+/).captures.first}/#{executable}"
}
  end
end

并在控制器中

  def show
    respond_to do |format|
      format.html
      format.pdf do
    render pdf: "file_name"   # Excluding ".pdf" extension.
      end
    end
  end
/config/initializers/mime_types.rb

中的

Mime::Type.register "application/xls", :xls
Mime::Type.register "application/xlsx", :xlsx
Mime::Type.register "application/pdf", :pdf unless Mime::Type.lookup_by_extension(:pdf)

并在文件views/invoises/show.pdf.erb

    <p>
      Invoice No:
      <%= @invoise.invoice_no %>
    </p>

  <p>
    Due date:
    <%= @invoise.due_date %>
  </p>

  <p>
    Total Amount:
    <%= @invoise.total_amount %>
  </p>

我在浏览器中点击的网址是/invoises/BRUqWOeEVNSN6GCwxQqLGg%253D%253D.pdf

我无法生成pdf文件。我也没有收到任何错误。当我点击上面的网址我的网页继续加载。我没有得到任何输出。

1 个答案:

答案 0 :(得分:0)

你可以这样做(基于RailsCasts系列的例子):

<强>的environment.rb

require 'pdf/writer'
Mime::Type.register 'application/pdf', :pdf

<强> products_controller.rb

def index
  @products = Product.find(:all)
  respond_to do |format|
    format.html
    format.pdf do
      send_data ProductDrawer.draw(@products), filename: 'products.pdf', type: 'application/pdf', disposition: 'inline'
    end
  end
end

<强> product_drawer.rb

def self.draw(products)
  pdf = PDF::Writer.new
  products.each do |product|
    pdf.text product.name
  end
  pdf.render
end

<强>视图/产品/ index.html.erb

<p><%= link_to 'PDF Format', formatted_products_path(:pdf) %></p>

我认为这是实现此功能的更好方法。

相关问题