我正在使用Rails 4
我遵循https://github.com/pdfkit/pdfkit
的指示在控制器中我有
respond_to do |format|
format.html {render layout:'application'}
format.csv {send_data @testdatares.to_csv}
format.pdf {
html = render_to_string(:layout => 'application' , :action => "testpage.html.erb");
kit = PDFKit.new(html);
kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/application.css";
send_data(kit.to_pdf, :filename => "some_name.pdf", :type => 'application/pdf')
}
end
在application.html.erb中我有
<!DOCTYPE html>
<html>
<head>
<title>STNEW</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= javascript_include_tag "http://www.google.com/jsapi", "/usr/local/lib/ruby/gems/2.1.0/gems/chartkick-1.3.2/app/assets/javascripts/chartkick",media:'all' %>
<%= csrf_meta_tags %>
</head>
请注意我已使用chartkick.js的绝对路径
现在在html中,完整地显示了chartkick内容。
但是在pdfkit生成的pdf文件中,所有chartkick内容都显示为“正在加载”,而正确显示文本
用Google搜索但没有找到答案
答案 0 :(得分:6)
最后,经过3天的搜索,追踪和错误,我找到了解决方案
首先,我必须使用wicked_pdf而不是pdfkit,因为前者提供了两个重要的辅助函数
wicked_pdf_stylesheet_link_tag
wicked_pdf_javascript_include_tag
然后我必须使用这两个帮助器来包含样式表和javascript,就像这样
<%= wicked_pdf_stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= wicked_pdf_javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= javascript_include_tag "http://www.google.com/jsapi"%>
<%= wicked_pdf_javascript_include_tag 'chartkick'%>
javascript_include_tag和wicked_pdf_javascript_include_tag之间的区别在于后者会将所有原始java代码写入html文件。这很重要,因为wicktml_df的核心wkhtmltopdf不知道在哪里可以找到js和css资产。这些资产位于/usr/local/lib/ruby/gems/2.1.0/gems/之类的位置(您的资产可能会有所不同),但只有您的rails应用知道它在哪里
请注意
<%= javascript_include_tag "http://www.google.com/jsapi"%>
你不能也不需要wicked_pdf_javascript_include_tag。
这里最重要的是。 wicked_pdf(以及pdfkit)将指示您安装gem wkhtmltopdf-binary,它具有最新版本0.9.9,然后只需调用类似这样的内容
format.pdf {render pdf :"test",layout:'application',template:'stinfos/testpage.html.erb'}
生成pdf。这仅适用于没有chartkick或highchart组件的html。在生成的PDF文件中,chartkick或highchart数字仅显示为“loading”
要解决此问题,您需要通过运行
删除wkhtmltopdf-binary gemgem uninstall wkhtmltopdf-binary
在你的rails app root
中然后从http://wkhtmltopdf.org/downloads.html
下载最新版本的wkhtmltopdf对我来说预编译版本工作 http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb
并安装
dpkg -i wkhtmltox-0.12.1_linux-trusty-amd64.deb
很可能它位于/ usr / local / bin / wkhtmltopdf
如果没有,请更改config / initializers / wicked_pdf.rb
:exe_path => '/yourpath/wkhtmltopdf'
然后将javascript_delay:2000添加到format.pdf
format.pdf {render pdf:"test",javascript_delay:2000,
layout:'application',template:'stinfos/testpage.html.erb'}
然后你应该看到图表生成的数字显示在pdf中。如果没有,请使用更长的延迟时间。
请注意,javascript_delay选项不适用于版本0.10以下的wkhtmlpdf
答案 1 :(得分:0)
虽然WickedPDF可能工作得很好,但还有一个使PDFKit工作的解决方法。您只需要将wkhtmltopdf
指向.js
文件的绝对路径,类似于用于包含CSS文件的方法:
html = render_to_string(:layout => 'application' , :action => "testpage.html.erb")
html.gsub!("/assets", "#{Rails.root}/public/assets")
kit = PDFKit.new(html)
kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/application.css"
send_data(kit.to_pdf, :filename => "some_name.pdf", :type => 'application/pdf')
预编译的chartkick.js
将位于/public/assets
文件夹中,wkhtmltopdf
可以在那里找到它。