(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生成