PDFJ.pmを使う

とある団体では年会費の請求書を毎年郵送しているのだが、これをオンライン化して請求書を必要とする会員が勝手に取り出せる仕組みを作ることになった。ここはPDF形式で請求書を生成するのが良かろうということで、実装方法をさぐってみたら中島靖氏によるPerlモジュールPDFJ.pmというのを見つけた。このモジュール、シンプルなのに本当に良くできている。特に日本語組版の対応がすばらしい。和文と欧文の境目を少しだけ開ける、なんてことがきちんとサポートされている。ドキュメントによると JIS X 4051「日本語文書の行組版方法」(1995)にほぼ準拠した行組版ルールを組み込んでいるとのこと。また、生成したPDF文書の閲覧にパスワードを付けたり、編集を不可にすることなども簡単に指定できる。

PDFJを使って文書を構成するときは、テキストオブジェクトやパラグラフオブジェクトなどからブロックオブジェクトを作り、これを一つずつ絶対座標で配置していく必要がある。そのため複雑なレイアウトや複数ページの文書を作るには、PDFJを直接アクセスするのではなくラッパーを構築したほうが良さそうだ。しかし、請求書のように単純なレイアウトのものであれば、それほど苦労することなくPDF文書を出力することができる。また、今回は使っていないがXML形式で書かれた文書からPDFを生成するためのフロントエンドとしてXPDFJというのも用意されている。