Ruby on rails 使用Wicked_PDF渲染为PDF时,不会显示ChartKick图表

Ruby on rails 使用Wicked_PDF渲染为PDF时,不会显示ChartKick图表,ruby-on-rails,pdf,charts,wicked-pdf,chartkick,Ruby On Rails,Pdf,Charts,Wicked Pdf,Chartkick,我正在使用Rails 4、Wicked_PDF和Chartkick Gem的 对于谷歌图表,我使用: html视图按预期提供了图表和所有内容。 当我将.pdf附加到url时,浏览器中会显示pdf文档,但不会显示ChartKick图表。 在图表应显示的位置出现以下错误: 加载图表时出错:未找到适配器 我在PDFKit文档中在线找到以下内容 PDF中不包含资源:图像、CSS或JavaScript包含资源 在PDF中似乎没有正确下载。这是由于 事实上,wkhtmltopdf不知道在哪里可以找到这些文

我正在使用Rails 4、Wicked_PDF和Chartkick Gem的
对于谷歌图表,我使用:

html视图按预期提供了图表和所有内容。 当我将.pdf附加到url时,浏览器中会显示pdf文档,但不会显示ChartKick图表。
在图表应显示的位置出现以下错误:

加载图表时出错:未找到适配器

我在PDFKit文档中在线找到以下内容

PDF中不包含资源:图像、CSS或JavaScript包含资源 在PDF中似乎没有正确下载。这是由于 事实上,wkhtmltopdf不知道在哪里可以找到这些文件。制作 确定您正在使用绝对路径(以正斜杠开始)来 资源。如果您使用PDFKit从原始HTML生成PDF source确保使用完整的路径(文件路径或URL) 包括域)。在限制性服务器环境中,根url 配置可能是您希望更改资产主机的内容

我假设wkhtmltopdf没有找到图表的链接,但我不确定如何修复此问题。
有人有什么建议吗

我找到了这个链接:

Unixmonkey帮助FattRyan解决Highcharts的问题


有人能帮我设置这个邪恶的pdf javascript include标签,这样Wicket pdf就可以使用Google图表从Chartkick接收图表了吗

在试图转换为pdf的视图顶部添加以下内容:

  <%= wicked_pdf_javascript_include_tag "application", "chartkick" %>

在pdf布局中引用CDN时,必须指定http或https协议

chartkick也是通过资产管道提供的,因此请改用
wicked\u pdf\u javascript\u include\u tag

替换此行:

<%= javascript_include_tag "//www.google.com/jsapi", "chartkik" %>

为此:

<%= javascript_include_tag "https://www.google.com/jsapi" %>
<%= wicked_pdf_javascript_include_tag "chartkick" %>

我在一个项目中就是这样做的


干杯。

我为此挣扎了一段时间,其他答案对我来说只是部分有用。我想为将来的任何人提供更多细节:

我为我们解决这一问题所做的四件大事是:

(1) 不使用中间件方法,而是使用基于您创建的PDF布局的一次性ruby嵌入式PDF

   #Example layout file
   #app/views/layout/pdf.pdf.rb

   <!DOCTYPE html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <%= wicked_pdf_stylesheet_link_tag "print" %> #print specific stylesheet
        <%= yield :head %>
      </head>
      <body>
        <h1>PDF Report</h1>
        <%= yield %>
      </body>
    </html>
(4) 传递“离散”轴选项,否则我们只看到轴,而没有基于时间的图表(线/面积/等)的数据

#在上述模板中,无论您在何处渲染图表
#app/views/users/profile.pdf.erb
#默认值为离散:false,因此不需要其他选项

我通过安装最新的wkhtmltopdf版本,然后在步骤(3)中的控制器中指定
javascript\u delay
选项,将其与Alex Villa的答案以及类似的答案结合起来:


如果有人在2019年遇到Rails 4的相同问题,那么尝试冻结2.3.5上的chartkick版本。因为从3.0.0版本中,他们删除了对Rails<4.2的支持。看见

在pdf视图文件的头的开头添加以下内容:

<%= javascript_include_tag "https://www.google.com/jsapi" %>
<%= wicked_pdf_javascript_include_tag "chartkick" %>

这就是我所做的一切,它奏效了

非常感谢你在这方面的帮助。您的建议解决了我的问题。是否有其他人对PDF上仅显示50%宽度的图形有问题?要调整宽度,我在库选项中指定了它。我的图形在列上指定了固定宽度后才显示?请您再清楚一点好吗?您的意思是不能在初始值设定项中指定WickedPdf选项,只能指定控制器?更改设置时是否在本地重新启动服务器?初始化器仅在应用程序的…初始化时加载。控制器中的配置将在页面重新加载时更新。第四个选项是为我做的-非常感谢!我做到了,还必须在控制器上添加
javascript\u延迟。因为我用的是海图,它有一点动画。。。谢谢你的帮助!
#Use it universally from the initializer or on the specific PDF rendering in the controller
#config/initializers/wicked_pdf.rb
WickedPdf.config = {
  javascript_delay: 3000,
  other_options...
}
#In the above template, wherever you render your chart
#app/views/users/profile.pdf.erb

<% content_for :head do %>
  <%= javascript_include_tag "some_cdn.com" %>
  <%= wicked_pdf_javascript_include_tag "chartkick" %>
<% end %>

<%= area_chart @data_retriever.time_based_data, discrete: true %>
<%= pie_chart @data_retriever.other_data %> # the default is discrete: false so no need for another option
respond_to do |format|
  format.html
  format.pdf do
    render pdf: "filename",
    javascript_delay: 3000,
    template: 'template_path.pdf.erb',
    layout: 'pdf.html'
  end
end
gem 'chartkick', '2.3.5'
<%= javascript_include_tag "https://www.google.com/jsapi" %>
<%= wicked_pdf_javascript_include_tag "chartkick" %>
gem 'wkhtmltopdf-binary-edge', '0.12.4.0'