我一直在考虑使用PDFKit为我正在开发的Rail3应用程序生成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}(我也尝试了更简洁的选项,将此功能提取到渲染器选项,正如Katz描述的here,但逻辑和问题是相同的)
这无疑解决了我的布局问题,但似乎没有一个应用程序的javascripts正在运行,图形也不再出现。我看了一下PDFKit源代码,但我看不出生成pdfs的方式有什么大的不同。
我仍然在摸索rails的许多东西,所以我确信这可能是一些非常明显的东西正盯着我的脸。任何人可能有的任何建议都将不胜感激
发布于 2011-03-11 00:58:54
这基本上就是我使用的解决方案,它大致基于Katz的非常棒的blog post
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 translate_paths方法与PDKKit机架中间件代码中使用的方法基本相同,可以在here及以下版本中看到
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发布于 2011-12-12 00:18:04
@media print { #id_of_divs_to_hide{显示:无;} }
https://stackoverflow.com/questions/5120395
复制相似问题