web-dev-qa-db-ja.com

グーグルマップの出力のためのwkhtmltopdfjavascript遅延

私はWKTHMTOPDFを使用していて、本当に楽しんでいます。ただし、変換中のページにはGoogleマップがあり、結果のPDFは、マップが半分読み込まれた状態で表示されます。以前のバージョンでは--javascript--delayを追加するオプションがあったことは知っていますが、非推奨のようです。バージョン0.99を使用しています。別のオプションはありますか?

9

--javascript-delayオプションは非推奨ではありません。また、最新バージョンにアップグレードすることをお勧めします-0.9.9は非常に古いバージョンです。

5
ashkulz

有る 別の --javascript--delayを使用する必要がない、これを行うためのより良い方法(そして、必要な遅延が実際に何であるかを知る前に遅延時間を設定する必要がないという利点があります)。

'tileloaded'イベントにコールバックを追加します。

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

次に、-window.statusオプションを「ready_to_print」に設定してwkhtmltopdfを呼び出します。

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

明らかに、wkhtmltopdfが呼び出されたとき、および上記のコードが起動する前に、window.statusがその値とまだ等しくない限り、文字列 'ready_to_print'を任意の値に変更できます。

適切なイベントは別の名前で行われますが、同様のアプローチをグーグルチャートで使用することができます。

25
mwag

Wkhtmltopdfバージョン0.12.0を使用できます

私はウェブサイトでもいくつかの非常にjavascriptのコンテンツを使用しています。以前は、バージョン0.99では正しくレンダリングされませんでしたが、オプション--javascript-delayを使用してバージョン0.12を使用すると、すべてが正常に表示されます。

他のオプションを追加して、JavaScriptを完全にロードすることもできます。つまり、--enable-javascript--no-stop-slow-scriptsなどです。

--javascript-delayを使用する際には、適切な時間遅延を使用する必要があることを確認してください。レンダリングにかかる​​時間はサイトによって異なります。より多くの時間遅延を使用する場合は、実行に時間がかかり、より少ない時間遅延を使用する場合は、javascriptが正しくロードされません。
wkhtmltopdfの最新バージョンへのリンク

10
Rohit Singhal

--javascript-delay関数は機能しますが、私の使用法には最適ではありません。おそらく、使用法も可変ですか? PDFには、ダースアイテムとそのマップビュー、または数百アイテムのリストのみが含まれる場合があります。誰も正しいmsec遅延はありません...

コントローラメソッド内で@ rohit-singhal tip(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'
             ...

両方とも機能しました。どちらかに利点があるかどうかわからない。

0
Jon Kern