wkhtmltopdfで無限ループでPDFを作り出してしまうバグ

やりたい事はただ一つ、HTMLファイルをPDFにしたいだけだ。

set CG_CONTEXT_SHOW_BACKTRACE environmental variable

何かしらの方法で取得したHTMLがあるとする

1
2
import pdfkit
pdfkit.from_file('201708.htm', '201708.pdf')

上記を実行すると

Dec 18 08:05:15 wkhtmltopdf[45102] <Error>: CGContextSetFillColor: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

が大量に出力されて出力されたPDFファイルが1000ページぐらいになる 調べたらまだバグとしては直っていない模様。

Infinite loop of errors · Issue #2196 · wkhtmltopdf/wkhtmltopdf

まずは他のツールがないかと探して見た

xhtml2pdf <= 不採用

このツールはissues見ている限りバギーだし、実際に動かしてみてもバギーだった。まともに動かない

WeasyPrint <= 採用

1
2
pip install weasyprint
brew install cairo pango gdk-pixbuf libffi

素直にいい感じに動いてくれた。

結論

pdfkit, wkhtmltopdfを捨ててweasyprint使おう