結論:サーバサイドでHTMLをPDFに変換したい。wkhtmltopdfを使おう。

サーバサイドでのHTMLからPDFへの変換。今どき流行らない気もしたんだけど、業務上どうしても必要だったので調べてみた。サーバサイドでPHPを使ってHTMLを出力していたので、そのままPHPからPDFを生成するライブラリを調べていたんだけど、どうもレイアウトが弱い…。

PHPからPDFを出力するライブラリ

そもそも、PHPを通す選択肢が悪手な感じ。ひと通り試したけど、微妙なレイアウトずれや、変換パフォーマンスが悪い。

その他に…

他になんかあるかなーと思って調べてたら、ここらへんが。けっこう良さそう。特にDocverter(内部的にはFlyingSaucerを使ってる)とかは対応フォーマットもかなりあって、良い感じ。

もっとシンプルに


単純にコマンドベースで変換できるようなのないかな?って思って調べてたらありました。

まさに。

使い方は簡単で、ビルド済みバイナリ、もしくは自前ビルドしてコマンド実行するだけ。一応Linux / Windowsに対応。Macに関してはまだだけど、そのうち公開されるっぽい雰囲気。

コマンド例

$ wkhtmltopdf http://google.com google.pdf

素晴らしい。レイアウトも大抵のHTML+CSSに対応しているっぽい。試しにYahoo!のトップページサンプル。


多少、背景画像などがずれたりしてるけど、厳密な変換が求められないなら、この程度であれば大丈夫でしょう。

wkhtmltopdfを日本語対応に

素のLinuxとかだと、wkhtmltopdfは日本語を変換できず。というよりは、単純に日本語フォントが入っていないだけ。なので、フォントをインストールしてあげればOK。

ここはひとつ、IPAフォントを使う。

IPAフォントインストール

# ユーザホームディレクトリにフォントを配置
$ mkdir ~/.fonts
$ cp IPAfont00302.zip ~/.fonts
$ cd ~/.fonts 
$ unzip IPAfont00302.zip 

# フォントキャッシュクリア
$ fc-cache -fv

# インストールされているフォントの確認
$ fc-list

これだけで日本語が入ったページも正常にPDFにしてくれる。