(2007.10.1新規作成; 2007.10.7公開)
Ruby on Rails アプリケーションから使えそうなPDF出力ツールを探してみました。
以前日記 (Rails でPDFを生成する) に書きましたが、canvas 機能 (座標を指定して文字を出力したり、線を引いたりする) だけでは帳票を作るのに実用ではありません。レイアウトエンジン (表や罫線、という指定の仕方) が必要です。
Rails アプリケーションに組み込む場合は Ruby で書かれたものでないといけませんが、別コマンドとして呼び出すことができればRubyにこだわることはありません。
(2024年5月)
長らく各所で使われていた wkhtmltopdf が 2023年1月にアーカイブされた。QtWebKit 5.212 に依存していたが, QtWebKit 自体は Qt 5.6 (2016年3月) で削除されており、fork されたものを使っていた。
Red Hat では Bug 1872819 - Retire qt5-qtwebkit, and everything that depends on it が出ている。手元の Fedora 38 だと qt5-qtwebkit パッケージを消しても大丈夫だったが、依存するアプリケィションが多すぎて、リポジトリから削除には至っていない。
PDF を描画機能で直接出力しようと思わない前提だと、テンプレートの使いやすさで選ぶのがいい。
2024年現在, WeasyPrint がテンプレートとして HTML + CSS で各種 HTML ツールも使えるし、サポートされる CSS の範囲も広く、ベストでしょう。
次いで, 同じく HTML + CSS の xhtml2pdf. あとは非常に歴史のある Apache FOP が XSL-FO.
独自形式では, Thinreports が軽い感じでよさそう。簡素なフォーマットでもよければ、Asciidoctor-pdf が使える。
別ページで、Apache FOPの使い方をまとめてみました; Apache FOPでPDF生成
Ruby 製だと、まずベースとして Prawn PDF が PDF 出力を担う。2024 年 3月に v2.5.0.
対抗馬は HexaPDF. ライセンスが AGPL. 商用ライセンスあり。PDF の描画能力を引き出すために、Ruby スクリプトで書いていく。そんなに変な感じではないが、もう少し簡単に行きたい。
Prawn は canvas を提供するので、この上にレイアウトエンジンを載せる。
Prawn を利用。2024年1月に v0.14.2. これはよい。日本語フォント問題なし。複雑な表、1ページを超える表、画像 OK.
2022年に v1.8.0. バックエンドは pdf-writer Prawn に変更. 開発低迷.
2023年に v3.0.3. まさか継続している。
PDF での保存機能がある。このパッケージが gtk3 に依存しており、gtk の機能を使うようだ。
コマンドラインで呼び出せば、別に Ruby 製に拘らなくてよい。
XSL-FO 1.1 XMLデータからPDFを生成する。コマンドラインツールとして使うこともできるし、Javaプログラムに埋め込むこともできる。多少の設定で日本語フォントを扱える。
日本語の出力も、フォント埋め込み、表組みも可能。プログラムで Paragraphオブジェクト (段落)、Tableオブジェクト (表) などを組み合わせる。
下記の xhtml2pdf が ReportLab 上で動く。
試してみた。pip コマンド一発で入る。
日本語フォントもOK. CSS のサポートも広い。
これがベストか。
Debian 12 Bookworm だと apt コマンドで入る。これが簡単。
日本語フォントOK, 表もOK。ただし CSS のサポートは WeasyPrint のほうが優れている。まず WeasyPrint でやってみたほうがいい。
Primitive な描画機能と、初歩的な HTML からの変換が可能。試していない。
'reportlab>=3.2.0', 'six>=1.9.0'
サイトには RML is a more powerfull, simple and flexible alternative to XSL:FO.
とある。日本語フォントの出力、TrueTypeフォントの埋め込みも可能。
実際に使ってみると、書き間違えたときのエラーが非常に不親切で、元になるRML XMLデータを作るのが難しい。Tiny ERP に同梱されているもののほうが新しいが、そちらも大して変わらない。
今のバージョンはちょっと苦しい。
プログラムでPhraseオブジェクト、Paragraphオブジェクト (段落)、Tableオブジェクト (表) などを加えていく。ReportLab みたい。日本語OK、フォント埋め込みも可能。
データを格納するXMLデータとタグマップデータを組み合わせてPDFへ変換することもできる。まだ試してないが、よさそう。
HTML文書からPDFは生成できて、日本語も出力できるが、フォントを切り替えることができなかった。デフォルトフォントだけでは見栄えがしない。
最新が 2015年の v4.10.0. 廃れた.