我需要将我的@manufacturers数组渲染为pdf,但只能通过点击视图中的某个链接来实现... 现在我有这样的代码
def index
@manufacturers = Manufacturer.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @manufacturers }
format.pdf { render :layout => false }
end
end
我在网上看到了很多例子,但我没有找到明确的实际例子......在我的数组@manufacturers的a4 pdf表中做多么简单?
答案 0 :(得分:1)
除了prawn之外,还可以使用prawnto rails插件来帮助将PDF呈现为模板。
有关插件的信息,请参见https://github.com/prior/prawnto,有关如何使用,请参见http://railscasts.com/episodes/153-pdfs-with-prawn。
答案 1 :(得分:0)
[注意:报告宝石目前仅在letter尺寸的纸张上生成,A4的贴片将受到欢迎!]
您可以使用Report gem,它使用Prawn生成PDF,还可以使用XLSX和CSV。
# a fake Manufacturer class - you probably have an ActiveRecord model
Manufacturer = Struct.new(:name, :gsa)
require 'report'
class ManufacturerReport < Report
table 'Manufacturers' do
head do
row 'Manufacturer report'
end
body do
rows :manufacturers
column 'Name', :name
column 'GSA?', :gsa
end
end
# you would want this so that you can pass in an array
# attr_reader :manufacturers
# def initialize(manufacturers)
# @manufacturers = manufacturers
# end
def manufacturers
[
Manufacturer.new('Ford', true),
Manufacturer.new('Fischer', false),
Manufacturer.new('Tesla', nil),
]
end
end
当您致电report.pdf.path
时,会在tmp目录中生成PDF:
report = ManufacturerReport.new
puts report.pdf.path #=> /tmp/185051406_Report__Pdf.pdf
puts report.xlsx.path #=> /tmp/185050541_Report__Xlsx.xlsx
您可以在控制器中执行以下操作:
@manufacturers = Manufacturer.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @manufacturers }
format.pdf do
report = ManufacturerReport.new(@manufacturers) # using the commented-out code
send_file report.pdf.path, :type => 'application/pdf', :disposition => 'attachment', :filename => 'ManufacturersReport.pdf'
# tmp files are periodically cleaned up by the operating system, but if you want to be extra clean you can call
# report.cleanup
# but this may remove the tmp files before apache/nginx/etc. finishes delivering the file
end
end
最终结果:
XLSX
请注意,XLSX会自动为您添加自动过滤器。