« 2006年02月19日 | メイン | 2006年02月21日 »

2006年02月20日

iTextの機能概要

次に、iTextでできることを調べてみます。

iTextは、オンラインのチュートリアルが充実していることが特徴です。機能説明のみでなく、簡単なJavaのサンプル・プログラムでできあがったPDFのサンプルが多数提供されています:
Tutorial: iText by Example

これは良い点で、チュートリアルを見てますと直ぐにできそうに思えてきますし、大いに学ぶべきところです。

(1) iTextの基本機能はPdfWriterです。
Documentオブジェクトにテキストやイメージをセットして、PDFを生成します。この時、ページの大きさをセットしたり、ランドスケープとポートレートの切り替えができます。ページの背景色、マージンの設定、マージンの左右対称指定、PDFのメタデータ設定、セキュリティ設定ができます。但し、これらの機能は基本的なもので、あまり見るべきものはありません。

ちょっと面白いのは、PDF、RTF、HTMLのWriterをもっていてひとつのソースから同時に3種類の出力ができることでしょう。

(2) 既存PDFを読み込んでコピーしたり、ページ番号やウオーターマークを付加する。
PdfWriterには、既存PDFのページを取り込む(Importする)機能があります。但し、Importされたページの注釈、しおりなどの対話機能は失われます。
PdfStamperで、既存PDFにページ番号やウオーターマークを付加したり、フォーム・フィールドに記入したり、フォームフィールドを平坦化して書き込めなくしたり、PDFに署名を追加、暗号化などができます。
PdfCopyでは、既存のPDFの結合ができます。異なるAcroFormをもつPDFを結合するにはPdfCopyFileldを使います。

iTextのオブジェクト
iTextのPDF出力はチャンク(文字の塊)、パラグラフ、フレーズ、リスト、フォント、アンカー、しおり、イメージ、表、カラムなどのオブジェクト単位で設定します。
・チャンク—同じフォント、フォントサイズ、色などの属性をもつ文字列。チャンク単位で、アンダーラインを指定したり、上付・下付指定したり、背景色を指定などができる。
・パラグラフ—段落の文字列。異なる属性をもつチャンクをつなげて作ることもできる。
・リスト—HTMLの箇条書き同様なオブジェクトです。
・アンカー—PDFでのリモート/ローカルのジャンプ先、ジャンプ先でのアクションなどを指定する。
・表—表の行やセルをPDFに出力するオブジェクト。

こういうオブジェクトを使って、JAVAのプログラムを記述すると、iTextがオブジェクトをページの上に適切に配置してPDFを生成します。

ざっと見たところ、XSL-FOにも同じようなオブジェクトがありますが、XSL-FOのオブジェクトは組版という観点から設計されているのに対して、iTextのオブジェクトはPDFから、つまり出力するデータから設計されているように思います。つまり両者のオブジェクトの設計思想には根本的な違いがあり、iTextの方が低レベル(インテリジェンスが低い、あるいは組版エンジンが初歩的という表現が良いかもしれません)のオブジェクトのようです。このあたりは、別途検討してみたいところです。

ただし、PDFに近いだけに、アンカー・オブジェクトなどはXSL-FOよりは機能が多くなっているようです。(XSL Formatter の場合は、XSL-FO仕様を独自拡張して、同様の機能を追加しています)。

直接的なコンテント
iTextは、PdfContentByteクラスを使って、PDFのページの中の指定した位置に、グラフィックス、テキストをに直接データを書き込むことができます。但し、この機能を扱うにはPDF Referenceを理解している必要があるようです。

RTFとHTMLの出力
ページの内容をPDFに出力するだけではなく、RTFとHTMLにも出力できます。

投票をお願いいたします

投稿者 koba : 08:00 | コメント (0) | トラックバック