简体   繁体   中英

Unable to generate the pdf with wicked_pdf gem in rails?

I am trying to generate a pdf by using wicked_pdf gem in my rails Application. i am having following code in my files.

gemfile

 gem 'wicked_pdf'
 gem 'wkhtmltopdf-binary'

and in config/initializers/wicked_pdf.rb file

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

and in controller

  def show
    respond_to do |format|
      format.html
      format.pdf do
    render pdf: "file_name"   # Excluding ".pdf" extension.
      end
    end
  end

in /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)

and in the file 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>

and the url i am clicking in the browser is /invoises/BRUqWOeEVNSN6GCwxQqLGg%253D%253D.pdf

Iam unable to generate pdf file. And i am not getting any error also. when i click the above url my webpage is keep on loading. i am not getting any output.

You can do in this way (example based on RailsCasts series):

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>

I think this is a better way to implement this feature.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM