wicked_pdf で chartkick のグラフを表示する
HTMLをPDFとしてレンダリングできるWicked PDFでは,HTML上では正常に表示されいるchartkickのグラフが正常に表示されず, Loading...
の表示のままPDFが生成される.
window_status
オプションを指定
オプションの window_status
を用いると,JSで window.status
が更新されるまで,グラフのレンダリングを待ってくれる.
似たようなオプションで javascript_delay
が使えるようだが,このオプションだといくら待っても Loading...
のままだった.
--javascript-delay : Wait some milliseconds for javascript finish (default 200)
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
class PdfsController < ApplicationController
def show
respond_to do |format|
format.html
format.pdf do
render pdf: "file_name",
layout: "pdf",
window_status: "FLAG_FOR_PDF" # Wait until window.status is equal to this string before rendering page
end
end
end
end
JS側で window.status
を設定し,グラフを再レンダリング
//= require libs/chartkick
//= require libs/loader
setTimeout((function () {
window.status = "FLAG_FOR_PDF";
Object.keys(Chartkick.charts).forEach(function (key) {
Chartkick.charts[key].redraw();
});
}), 3000);
Production環境で動作しない問題
ローカル環境では正常に動作するが,プリコンパイルをしているProduction環境で,いくら待ってもPDFがレンダリングされない問題が発生した.
サーバのログ的にはPDFレンダリングがいつまで経っても実行されていなかったので window.status
が正常に更新されないと推測,JSファイルの読み込み方 wicked_pdf_javascript_include_tag
から javascript_include_tag wicked_pdf_asset_base64
に変更したところ正常に動作した.
<!DOCTYPE html>
<html>
<head>
<%= csrf_meta_tags %>
<%= wicked_pdf_stylesheet_link_tag 'application' %>
<!-- 本番環境で動作しなくなる -->
<!-- <%= wicked_pdf_javascript_include_tag 'pdf' %> -->
<%= javascript_include_tag wicked_pdf_asset_base64('pdf') %>
</head>
<body>
<%= yield %>
</body>
</html>
Author And Source
この問題について(wicked_pdf で chartkick のグラフを表示する), 我々は、より多くの情報をここで見つけました https://qiita.com/tanakaworld/items/1bbb18df438f9a6c39a2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .