我正在尝试使用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文件。我也没有收到任何错误。当我点击上面的网址我的网页继续加载。我没有得到任何输出。
答案 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>
我认为这是实现此功能的更好方法。