暇です...part4(最終回)
ついに今週で暇な状況も終わり。来週から新規案件が始まる。
iText
生産管理システム、帳票システムなどシステムでは多くの場合、Word,Excel,PDFといったファイルとの連携が必要となる。例えばJavaで開発しているなら
Word,Excel→Jakarta POI
PDF→iText
といったオープンソースプロジェクトの選択により連携が可能となる。
※poi=Poor Obfuscation Implementation (不十分で曖昧な実装) という命名にたいしてMicrosoftはなにも言わないのだろうか?
今回はC#でPDFとの連携が可能かどうか調べてみた
まずPDFの入出力だがiText.NETあるいはiTextSharpというフリーライブラリにより可能であることがわかった(ここまではすぐたどり着いた)。
で次が問題だった。
アプリケーションからPDF帳票を出力する時のパターンは
- あらかじめPDFのテンプレートを用意しておく
- ユーザが帳票を出力する時に、そのテンプレートの入力が必要な部分にプログラムで自動入力しファイルを作成する
という流れが単純でわかりやすい。
例えばこんなテンプレートを用意して
(PDFテンプレート) 製品名 : seihinmei 在庫数 : zaikosuu
プログラムで
(ソースコード) seihinmei = "06JP-FreeStle 100L" zaikosuu = "3"
という具合に入力する。
よってPDF操作に関する要件は
- テンプレートの入力が必要な箇所を見つけ出し
- そこに値を入力する
ということになる。
これが可能かどうかを長時間調べ続けた結果、iTextではおそらく無理であろうことことがが判明した。(http://www.ujihara.jp/iTextdotNET/ja/tutorial/general/copystamp/index.html)
Javaではこの問題を解決するフリーソフト(OpenFunxion)があったのだが・・・
暇を見つけて自分で作ってしまうか?
【補足】
今回の要求を実現するためにPDFにはAcroFieldsというコントロールが用意されている。入力が必要な箇所をこのAcroFieldsで作成しておけばiTextから簡単に値が入力できる。ただそうすると
- テンプレートを作成するにはAcrobatの購入が必要
- AcroFieldsをプログラムから複製することは出来なさそうなので動的にサイズの変わる表形式は無理?(多分
ということになってしまう。
【2006/5/13追記】
OpenFunxionの代わりにOpenOffice+JooReportsでも同様のことが出来るらしい。http://codezine.jp/a/article.aspx?aid=131
[処理概要]
- 最初にOpenOfficeを使ってテンプレートファイル(*.SXW)を用意しておく (ここはやはり手作業)
- JooReportsで値の代入+PDF変換
[感想]
OpenFunxionのGUIの使いにくさを考えるとテンプレート作成は楽かも。でもOpenOfficeが起動してないと使えないってのは致命傷。