グラフィックを作成する
今度は、グラフィックを作成してドキュメントに組み込んでみることにしましょう。実は、iTextでは「Graphics2D」を利用して直接図形を描画することができるのです。
package jp.allabout;
import java.awt.Graphics2D;
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;
public class SampleApp {
public static void main(String[] args){
FileOutputStream out = null;
BufferedOutputStream bout = null;
PdfWriter writer = null;
Document doc = null;
try {
out = new FileOutputStream("test.pdf");
bout = new BufferedOutputStream(out);
doc = new Document(new Rectangle(0,0,500,500));
writer = PdfWriter.getInstance(doc, bout);
doc.open();
Font kaku_12 = new Font(BaseFont.createFont(
"HeiseiKakuGo-W5","UniJIS-UCS2-H",
BaseFont.NOT_EMBEDDED),12);
kaku_12.setColor(CMYKColor.RED);
doc.add(new Paragraph("※グラフィックのサンプル。", kaku_12));
// ※ここからグラフィック描画
PdfContentByte cb = writer.getDirectContent();
cb.saveState();
cb.concatCTM(1, 0, 0, 1, 50, 250);
Graphics2D g2 = cb.createGraphics(200, 150);
g2.setColor(java.awt.Color.LIGHT_GRAY);
g2.fillRect(0,0,200,150);
g2.setColor(java.awt.Color.BLUE);
g2.fillOval(50,50,100,50);
g2.dispose();
cb.restoreState();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
doc.close();
System.out.println("ended...");
}
}
}
作成されたPDFファイルでは、グレーの四角形の上に青い楕円形が描かれている。 |
ここでは、まず最初に「PdfContentByte」クラスのインスタンスを用意します。これは、ユーザによってテキストやグラフィックなどのコンテンツを作成する際に利用するものです。
PdfContentByte cb = writer.getDirectContent();
PdfWriterの「getDirectContent」メソッドを呼び出し、PdfContentByteインスタンスを取得します。それから「saveState」というメソッドを呼び出してグラフィック設定を保存しておきます。
cb.concatCTM(0, 0, 0, 0, 50, 250);
続いて行っているのは、コンテンツの領域設定です。ここで、ドキュメントの左下から右に50、上に250の地点に描画地点をトランスレートします。これで、この地点に描画のゼロ座標が設定されます。
Graphics2D g2 = cb.createGraphics(200, 150);
createGraphicsを使い、Graphics2Dインスタンスを作成します。これで、先のconcatCTMで指定した地点に200×150の大きさでインスタンスを作成できました。後は、このGraphics2Dを使って描画をするだけです。
g2.setColor(java.awt.Color.LIGHT_GRAY);
g2.fillRect(0,0,200,150);
g2.setColor(java.awt.Color.BLUE);
g2.fillOval(50,50,100,50);
g2.dispose();
このあたりは、普通の描画と同じですから説明は不要ですね。こうして描画メソッドを呼び出して描画をすれば、それが描かれていきます。面白いのは、通常はビットマップで描かれる描画メソッドの図形ですが、ここではPDFのコマンドに変換されるため、ちゃんと拡大縮小してもジャギーのない図形として描かれるのですね。作成したGraphics2Dは、不要になった時点でdisposeしておきます。
cb.restoreState();
最後に、restoreStateでグラフィック設定をリストアして作業終了です。あとは、これまでと同様にドキュメントをcloseするだけです。
――ざっと、PDFファイルへのテキストとグラフィックの描画について説明をしましたが、いかがでしたか。専用クラスがどっと出てきたので慣れないとかなりわかりにくい印象でしょうが、それほど難しい操作はしていません。基本的な手順さえわかれば、比較的簡単に独自の文書を作成できることでしょう。JavaのプログラムからPDFを生成できれば、いろいろと応用ができそうですね。