PDF生成ツールあれこれ

(2007.10.1新規作成; 2007.10.7公開)

Ruby on Railsアプリケーションから使えそうなPDF出力ツールを探してみました。そのまとめです。

以前日記 (railsでPDFを生成する) に書きましたが、キャンバス機能(座標を指定して文字を出力したり、線を引いたりする)だけでは、帳票を作るのに実用ではありません。レイアウトエンジン(表や罫線、という指定の仕方)が必要です。

Railsアプリケーションに組み込む場合はRubyで書かれたものでないといけませんが、別コマンドとして呼び出すことができればRubyにこだわることはありません。

PDF生成ツール

探してみると、結構いっぱいあります。

ReportLab - Open Source Software
ReportLab Toolkitは、Python で書かれたツールキット。日本語の出力も、フォント埋め込み、表組みも可能。プログラムで、Paragraphオブジェクト(段落)、Tableオブジェクト(表)などを組み合わせる。
OpenReport: Open Source and profesional reporting solution
このサイトにあるTiny RML2PDFは、XMLデータをPDFに変換する。内部でReportLabを使っている。サイトには、RML is a more powerfull, simple and flexible alternative to XSL:FO. とある。日本語フォントの出力、TrueTypeフォントの埋め込みも可能。

実際に使ってみると、書き間違えたときのエラーが非常に不親切で、元になるRML XMLデータを作るのが難しい。Tiny ERPに同梱されているもののほうが新しいが、そちらも大して変わらない。

今のバージョンはちょっと苦しい。

Ruby Reports
Ruby Reports (Ruport) は、Rubyで書かれたリポーティングツール。Ruby on Railsとの相性がいい。ActiveRecordのデータを少ないステップでPDF化できる。裏でpdf-writerを使っている。

pdf-writerの最新版は、バージョン1.1.3だが、そのままでは日本語フォントが扱えず、TrueTypeフォントの埋め込みもできない。

pdf-writerが更新されない限り、実用にならないのではないか。

iText, a Free Java-PDF Library: Home Page
Javaで書かれたもの。プログラムでPhraseオブジェクト、Paragraphオブジェクト(段落)、Tableオブジェクト(表)などを加えていく。ReportLabみたい。日本語OK、フォント埋め込みも可能。

データを格納するXMLデータとタグマップデータを組み合わせてPDFへ変換することもできる。まだ試してないが、よさそう。

Apache FOP
XSL-FO XMLデータからPDFを生成する。コマンドラインツールとして使うこともできるし、Javaプログラムに埋め込むこともできる。多少の設定で日本語フォントを扱える。
SourceForge.net: JasperReports - Java Reporting
Javaの帳票ツール。GUIプログラムのiReportで帳票テンプレートを作り、JasperReportsでデータベースから取り出したデータを動的に埋め込んでPDFを出力する。あらかじめテンプレートをコンパイルして、PDF生成処理の時間を短縮するようになっている。
ここは中島 靖のホームページです。
PDFJ -- Perlで書かれたPDF生成モジュール。日本語組版ルールを組み込んであり、XMLデータからPDFを作ることもできる (XPDFJ)。
gtkhtml3 + gtk+のPDF出力機能
番外。gtkhtml3 (libgtkhtml) ライブラリはEvolutionの内部で使われているHTMLエンジン。gtk+の印刷ダイアログはPDF出力があるので、組み合わせて何とかならないか試してみた。

HTML文書からPDFは生成できて、日本語も出力できるが、フォントを切り替えることができなかった。デフォルトフォントだけでは見栄えがしない。

Rabbit
もう一つ番外。プレゼンテーションソフト。ジャンルが違う。

結論

日本語限定ならPDFJが簡単で見栄えよく作れそうに感じます。新しくPerlで書く気にならないのが難点でしょうか。あとは、iText, Apache FOP, JasperReportsのいずれかがいいように思います。

別ページで、Apache FOPの使い方をまとめてみました; Apache FOPでPDF生成