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.