【发布时间】:2018-07-22 19:32:58
【问题描述】:
我正在尝试呈现包含谷歌地图的我的页面的 PDF,但它总是显示为空。奇怪的是,当我使用 wkhtmltopdf 二进制文件调用 url 时,它实际上可以工作。我会错过什么吗???这是我目前的设置
家庭控制器
class HomeController < ApplicationController
def index
respond_to do |format|
format.html
format.pdf do
render pdf: "Example PDF",
layout: 'pdf.html.erb',
show_as_html: params.key?('debug'),
javascript_delay: 3000
end
end
end
end
index.pdf.erb
<%- content_for :js do %>
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script src = "//maps.googleapis.com/maps/api/js?&key=GOOGLE_API_KEY"></script>
<script src="//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js"></script>
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
$(window).load(function(){
initMap();
})
</script>
<% end %>
<h1>Google Map</h1>
<div id="map" style="width: 800px; height: 400px;"></div>
将 debug 设置为 true(查看用于呈现 pdf 的 html)
当我使用 wkhtmltopdf 命令行实用程序时。它正确地呈现了 pdf。
$ wkhtmltopdf --javascript-delay 3000 http://localhost:4000/home/index.pdf?debug output.pdf
我在 Rails 应用程序中做错了什么吗?一些指针真的会有所帮助。谢谢!
【问题讨论】:
-
您在 rails 日志中看到任何错误吗?
-
日志中没有错误。一切正常
-
仔细检查您没有安装两个不同版本的
wkhtmltopdf并且在终端上执行不同的版本。如果您有:rubygems.org/gems/wkhtmltopdf-binary,可能就是这种情况。查看 rails 日志中执行的命令以获取更多详细信息,并尝试在终端中准确复制该命令。 -
@BrendonMuir 在 rails 日志
"***[\"/usr/local/bin/wkhtmltopdf\", \"-q\", \"--javascript-delay\", \"3000\", \"file:////var/folders/y4/18x7npks3w5b_yr8jz304wzr0000gn/T/wicked_pdf20180723-2048-1h1m8w7.html\", \"/var/folders/y4/18x7npks3w5b_yr8jz304wzr0000gn/T/wicked_pdf_generated_file20180723-2048-u71ska.pdf\"]*****"中执行的命令并执行which wkhtmltopdf返回/usr/local/bin/wkhtmltopdf,这是正在使用的确切二进制文件。一切看起来都应该如此 -
也许需要 javascript-delay 才能等待带有地图的 iframe 加载?您是否在命令行测试中尝试过?
标签: ruby-on-rails ruby wkhtmltopdf wicked-pdf