Laravel 環境でPDFを作成するとなると Laravel-snappy を使うとケースがあると思います。ついでに google chart api を使って、グラフも出力してしまおう。
この記事では、そんな環境下で突如としてグラフが出力されなくなった方のお役に立てれば良いなと思いまとめた記事になります。
環境
現象が発生した環境です。
- Laravel 5.8 (5.8.36)
- laravel-snappy 0.4.6
- wkhmltopdf 0.12.4
参考記事
今回発生した現象
2020年5月辺りから、PDFに表示できていたグラフが表示されなくなり、真っ白なPDFが作成されてしまう現象が起きるようになりました。
それまでは、Laravel-Snappyでpdfを出力できるようになるまで でご説明頂いているような対応で出力しています。
問題が発生するまで使っていたコード
function init() {
google.load('visualization', '1.1', {
'packages': ['corechart'],
callback: drawCharts
});
}
修正後のコード結果
原因の說明の前に対応策から、出力できるように書き換えたコードはこのようになります。
Laravel-Snappyでpdfを出力できるようになるまでにも書かれていますが、setOnLoadCallback
メソッド内で Promise が使われているため、 wkhtmltopdf
がES6に対応しておらず、JavaScriptが発火しません。その代わりとして、 setInterval
メソッドで対応することで、比較的最近のバージョンでも出力できるようになっています。
コード内に書かれている '48'
というのが重要で、Googleのサンプル にかかれている current
にするとエラーになってします。(原因は、調査中)
修正後のコード
function init() {
google.charts.load('48', {'packages':['corechart']});
var interval = setInterval(
function() {
if ( google.visualization !== undefined && google.visualization.DataTable !== undefined && google.visualization.PieChart !== undefined ){
clearInterval(interval);
window.status = 'ready';
drawCharts();
}
}, 100);
}
原因
TBD