Wkhtmltopdfで指定サイズより小さく出力されるときの対処法
HTMLをPDFに変換してくれるオープンソースライブラリWkhtmltopdfがある。オープンソースな上にクロスプラットフォームという優れもののライブラリだ。ただ、これによって出力されたPDFで、フォントサイズやボックスサイズなどが指定より小さく出力されることがある。大凡、指定の90パーセント程度に縮小されるのである。A4判程度ならこの差はなかなか気が付かないが、A0といった大判出力では相当の絶対誤差となって出てくる。今回はそれの対処法について書こう。
原因はwebkitのレンダリング
Wkhtmltopdfはレンダリングエンジンwebkitを使っているが、このwebkitにはpixel/inch ratioを自動調整する機能がある。元々は種々のデバイス解像度に対応するためのものらしいが、これが悪さをするらしい。通常のCSSでは96[pixel/inch]であるが、この値を前提に厳密な位置指定をして居る状態でpixel/inchを弄られると当然おかしな出力になる。
オプションで回避。
上記の事態を避けるためには、PDF出力時に--disable-smart-shrinkingオプションを付ければよい。このオプションは公式では次の様に説明されて居る。
Disable the intelligent shrinking strategy used by WebKit that makes the pixel/dpi ratio none constant
さて、下記の様にオプションを付けると大体意図通りの大きさで出力された。
$ wkhtmktopdf --disable-smart-shrinking input output
最初はCSSの記述ミスかと思って居たが、調べてみたらライブラリのお節介な調節機能の所為だったという落ち。