PDFkit javascript问题

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的生成方式没有任何重大差异.

我仍然用铁轨找到很多东西,所以我敢肯定这可能是非常显而易见的盯着我的东西.任何人可能拥有的任何指针都将非常感激

Con*_*nor 7

这基本上是我使用的解决方案,它大致基于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)