我在控制器中有这个。我需要我的视图来生成一些HTML,然后我使用Flying Saucer转换为pdf(我使用JRuby)。然后将其返回给客户端。
def show
@cs_agreement = CsAgreement.find(params[:id])
respond_to do |format|
format.pdf do
# TODO there must be a better way of getting the path to the view!
report_template = ERB.new(File.new("app/views/agreement_document/client_agreement.erb"), nil, "%<")
created_report = report_template.result(binding)
send_data( FlyingSaucer::create_pdf(created_report), :filename => "agreement.pdf",
:type => "application/pdf",
:disposition => 'inline')
end
end
这是我能做的最好的...我只能弄清楚如何使用ERB手动生成html,这样我就可以在返回之前检索要发送到FlyingSaucer的数据。
这种方式似乎也意味着我无法访问任何Helper方法。
我有没有办法让rails为我生成html并以某种方式拦截它以在返回之前转换为pdf?渲染函数似乎只生成并返回一个..
答案 0 :(得分:1)
您可以使用render_to_string
,如
report_template = render_to_string 'client_agreement'
与render
相同的选项。更多详情here。
如果您需要指定不同的控制器/操作,您也可以这样做,例如通过:action => :action_name
。
答案 1 :(得分:1)
使用render_to_string
。
def show
@cs_agreement = CsAgreement.find(params[:id])
respond_to do |format|
format.pdf do
result = render_to_string
send_data( FlyingSaucer::create_pdf(result), :filename => "agreement.pdf",
:type => "application/pdf",
:disposition => 'inline')
end
end
end