wkhtmltopdf javascript延迟输出谷歌地图

时间:2014-02-05 13:18:23

标签: wkhtmltopdf

我正在与WKTHMTOPDF合作并且非常享受它。但是,正在转换的页面具有谷歌地图,并且生成的PDF随着地图的一半加载而出现。我知道有一个选项可以在以前的版本中添加--javascript--delay,但它似乎已被弃用。我使用的是0.99版本。有不同的选择吗?

4 个答案:

答案 0 :(得分:24)

还有另一种更好的方法,不需要使用--javascript - 延迟(并且有一个好处就是在你不知道需要什么之前不要求你设置延迟时间延迟实际上是)。

向“已加载”'添加回调。事件:

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
   window.status = 'ready_to_print';
});

然后调用wkhtmltopdf并将--window.status选项设置为' ready_to_print' e.g。

wkhtmltopdf --window-status ready_to_print map.html map.pdf

显然你可以改变字符串' ready_to_print'只要在调用wkhtmltopdf并且在上面的代码触发之前window.status不等于该值,就可以成为你想要的任何东西。

类似的方法可以与谷歌图表一起使用,但适当的事件使用不同的名称。

答案 1 :(得分:8)

您可以使用wkhtmltopdf版本0.12.0

我也在网站上使用了一些高度javascript的内容。以前,版本0.99没有正确渲染但是当我使用版本0.12使用选项--javascript-delay时,一切看起来都很好。

您也可以添加其他选项以完美加载您的javascript,--enable-javascript--no-stop-slow-scripts

确保在使用--javascript-delay时必须使用适当的时间延迟,这取决于您的网站需要多长时间才能呈现。如果你将使用更多的时间延迟,那么执行将花费更多的时间,如果你将花费更少的时间延迟,那么javascript将无法正确加载。
The link to latest version of wkhtmltopdf

答案 2 :(得分:4)

根本不弃用--javascript-delay选项。此外,建议升级到最新版本 - 0.9.9是一个非常旧的版本。

答案 3 :(得分:0)

--javascript-delay函数有效,但对于我的用法而言不是最佳选择-也许您的用法也是可变的? PDF有时可以仅包含一个六个项目及其地图视图的列表,或者在地图上包含数百个项目的列表。 msec对我没有延迟...

我在控制器方法内成功使用了@ rohit-singhal技巧(使用GMaps4Rails gem和haml视图的Rails应用程序):

def index
  ...
  respond_to do |format|
    format.pdf do
      @map_data = { markers: @map_hash, zoom: 10, cluster_zoom: 10, center: center_coordinates,
                    fit_to_bounds: true, show_center_marker: false, map_type: 'roadmap'}
      render pdf:             'Water Supplies',
             disposition:     'inline',
             layout:          'layouts/pdf.html.haml',
             show_as_html:     params.key?('debug'),
             no_stop_slow_scripts: ''
    end
  end
end

我也使用了@mwag的tilesloaded回调。 (谷歌地图生成javascript中的逐字记录。)感兴趣的控制器行可将no_stop_slow_scripts切换为:

             ...
             window_status:   'ready_to_print'
             ...

两人都工作。不确定彼此之间是否有优势。