簡體   English   中英

無法在rails中生成帶有wicked_pdf gem的pdf?

[英]Unable to generate the pdf with wicked_pdf gem in rails?

我正在嘗試通過在rails應用程序中使用wicked_pdf gem生成pdf 我的文件中包含以下代碼。

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>

我在瀏覽器中單擊的URL是/invoises/BRUqWOeEVNSN6GCwxQqLGg%253D%253D.pdf

我無法生成pdf文件。 而且我也沒有任何錯誤。 當我單擊上面的URL時,我的網頁正在繼續加載。 我沒有任何輸出。

您可以通過這種方式進行操作(基於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

views / products / index.html.erb

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

我認為這是實現此功能的更好方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM