/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

PythonでHTMLをPDF出力するたった1つの方法

HTMLをPDFに変換して出力するにはwkhtmltopdf*1を使うと言語問わず簡単に出力できますが、 PythonであればPyQt*2のQtWebkitを使うことでも出力できます。 どちらにしてもQtWebkitのレンダリングエンジンを使っていることに変わりはないです。PyQt4を使っています。

Windowsインストーラが提供されています。

http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.2/PyQt4-4.11.2-gpl-Py2.7-Qt4.8.6-x64.exe

RHEL(CentOS)の場合はyumでインストールできます。

MacはHomebrewで適当に。

GUIのないLinuxサーバではPDF出力時にXvfb*3 を利用します。いろいろと依存関係がめんどくさいのでX関係のパッケージ一式とXvfbをインストールしておきましょう。

GoogleのトップページをPDF出力するには以下のようなスクリプトで出来ます。

GUIのないLinuxサーバではxvfb-runコマンドに食わせる形で実行します。

ローカルのHTMLファイルもPDF出力できます。

PDFはフォントが色々と問題になってきます。 Linux環境での日本語フォントはRedhat系ならgroupinstallでインストールできます。

個人的にはMigMixフォント*4がオススメなので、別途fontの設定をすると良いと思います。

フォント設定はユーザ毎に行ったほうが良いので、ホームディレクトリ以下に.fonts.confディレクトリを作成し、 適当に拾ってきたfont設定*5を修正して配置し、 fc-cache -fvします。

以下は特定のディレクトリ以下のHTMLをファイル名順に取得、PDF変換し、 PyPDF2*6で1つのファイルにマージするようなクラスです。 テンプレートエンジンと組み合わせて動的なHTMLをPDF出力すると良いですね。

変換するHTMLファイルを格納するディレクトリ、変換したPDFを出力するディレクトリ、マージPDFのファイル名を与える形で使います。

RedshiftのデータをJinja2*7とHighcharts*8で動的なグラフ表示をして、レポーティングに活用したりしています。 HighchartsのグラフをPDFに出力するときは animation*9, shadow*10, enableMouseTracking*11 を無効にするのを忘れずに。

Enjoy!