4

我正在使用 Rails 4、Wicked_PDF 和 Chartkick Gem's
For Google Charts 我使用:

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

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

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

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

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

我假设 wkhtmltopdf 没有找到图表的链接,但我不知道如何解决这个问题。
有人有建议吗?

我找到了这个链接:
Render jQuery in wicked_pdf

Unixmonkey 帮助 FattRyan 为 Highcharts 解决这个问题。

谁能帮助如何设置这个 wicked_pdf_javascript_include_tag 以便 Wicket_PDF 将使用 Google 图表接受来自 Chartkick 的图表?

4

5 回答 5

5

在 pdf 布局中引用 CDN 时,您必须指定协议httphttps 。

chartkick也通过资产管道提供服务,因此请改用wicked_pdf_javascript_include_tag

替换这一行:

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

有了这个:

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

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

干杯。

于 2014-11-08T13:01:21.693 回答
3

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

我为我们解决这个问题所做的 4 件主要事情是:

(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>

(2) 使用 wicked_pdf 的资产助手仅在那些页面上为我们存储在应用程序中的资产加载我们需要的 javascript(所有基于 CDN 的资产都可以使用普通的 javascript_include_tag 加载)

#Example page template for a PDF you're downloading
#app/views/users/profile.pdf.erb

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

<p>All your pages content</p>

(3) 使用 javascript_delay 选项

#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...
}

(4) 通过“离散”轴选项,否则我们只看到轴,没有时间图表的数据(线/区域/等)

#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
于 2015-03-10T19:08:48.693 回答
2

将以下内容添加到您尝试转换为 pdf 的视图顶部:

  <%= wicked_pdf_javascript_include_tag "application", "chartkick" %>
于 2014-10-13T14:58:16.487 回答
1

通过安装最新的 wkhtmltopdf 版本然后在步骤 (3) 中指定控制器中的选项,我得到了它与 Alex Villa 的答案和类似问题的答案一起使用:javascript_delay

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
于 2015-05-09T18:10:23.937 回答
0

如果有人在 2019 年遇到与 Rails 4 相同的问题,请尝试在2.3.5上冻结chartkick版本。因为从3.0.0版本开始,他们删除了对 Rails < 4.2 的支持。请参阅 chartkick 更改日志

gem 'chartkick', '2.3.5'

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

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

并用wkhtmltopdf-binary-edge替换wkhtmltopdf-binary gem 。我用的是 0.12.4.0 版本。

gem 'wkhtmltopdf-binary-edge', '0.12.4.0'

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

于 2019-03-28T11:44:43.357 回答