最后,经过三天的搜索、尝试和错误,我找到了解决方案
首先,我必须使用 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 文件中。这很重要,因为 wicked_pdf 的核心 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 图形仅显示为“正在加载”
要解决此问题,您需要通过运行删除 wkhtmltopdf-binary gem
gem uninstall wkhtmltopdf-binary
在你的 Rails 应用程序根目录中
然后从下载最新版本的 wkhtmltopdfhttp://wkhtmltopdf.org/downloads.html http://wkhtmltopdf.org/downloads.html
对我来说预编译版本有效http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-trusty-amd64.deb 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 中显示了 Chartkick 数据。如果不是,请使用更大的延迟时间。
请注意,javascript_delay 选项对于 0.10 以下版本的 wkhtmlpdf 不可用