wkhtmltopdfは、WebKitエンジンを使ってHTMLからPDFを起こしてくれるソフトウェアです。HTMLやCSSだけでなく、JavaScriptも解釈してくれるし、独立したプログラムということもあって、RailsからでもPHPからでも便利に使えます。
なぜか処理に失敗
で、RiotでレイアウトしたページをPDFにする必要性が出てきたので、そのままwkhtmltopdfに投げてみたところ、出てきたものはRiotのタグがすっかり抜けたものとなってしまいました。どうしようかと調べてみると、--debug-javascript
という、JavaScriptの実行状況を出力するオプションがあったので、何かヒントが得られないかやってみました。
Warning: undefined:0 TypeError: 'undefined' is not a function
とりあえずJavaScriptのエラーらしいことはわかったのですが、原因が判然としないので、「'undefined' is not a function」などを手がかりに検索していきました。すると、C3.jsというライブラリのIssueにたどり着きました。
解決策
wkhtmltopdfの環境ではFunction.prototype.bind
がないためにエラーとなるということで、Polyfillを入れれば解消するとのことでした。
Function.prototype.bind = Function.prototype.bind || function (thisp) {
var fn = this;
return function () {
return fn.apply(thisp, arguments);
};
};