Con*_*nor 5 ruby-on-rails ruby-on-rails-3
我一直在研究如何使用PDFKit为我正在开发的Rail 3应用程序生成pdf报告.基本上,如果我使用PDFKit作为中间件,应用程序中的任何页面都很好地呈现为pdf,包括javascript生成的图形.
但是,我想为pdf报告使用不同的布局来删除任何侧边栏或导航细节,因此我没有使用中间件选项,而是将其添加到相关的控制器操作中
format.pdf {
html = render_to_string(:action => "show.html.erb", :layout => "report.html.erb")
kit = PDFKit.new(html)
kit.stylesheets << "#{Rails.root}/public/stylesheets/application.css"
send_data kit.to_pdf, :filename => "file.pdf", :type => :pdf}
Run Code Online (Sandbox Code Playgroud)
(我也尝试了将此功能提取到渲染器选项的neater选项,如Katz 在此描述但逻辑和问题是相同的)
这肯定解决了我的布局问题,但似乎没有应用程序的javascripts正在运行,图表不再出现.我看了一下PDFKit源代码,但我发现pdf的生成方式没有任何重大差异.
我仍然用铁轨找到很多东西,所以我敢肯定这可能是非常显而易见的盯着我的东西.任何人可能拥有的任何指针都将非常感激
这基本上是我使用的解决方案,它大致基于Katz真正伟大的博客文章
ActionController.add_renderer :pdf do |template, options|
html = render_to_string template, options
html = translate_paths(html, env)
kit = PDFKit.new(html)
css_files = Array.wrap(options.delete(:css)).each do |css_sheet|
kit.stylesheets << "#{Rails.root}/public/stylesheets/#{css_sheet}.css"
end
send_data kit.to_pdf, :filename => options[:filename], :type => Mime::PDF
end
Run Code Online (Sandbox Code Playgroud)
translate_paths方法与PDKKit机架中间件代码中使用的方法基本相同,可在此处和下方看到
def translate_paths(body, env)
# Host with protocol
root = "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
body.gsub(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2491 次 |
| 最近记录: |