Ruby on rails 使用Wicked_PDF渲染为PDF时,不会显示ChartKick图表
我正在使用Rails 4、Wicked_PDF和Chartkick Gem的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不知道在哪里可以找到这些文
对于谷歌图表,我使用: 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'