PDFファイル作成の基本
それでは、実際にiTextを使ってPDFファイルを作成してみましょう。まずは、PDF作成のもっとも基本となる処理について、簡単なサンプルを使って説明しましょう。
package jp.allabout;
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();
// ※ここに、内容を書いていく
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
doc.close();
System.out.println("ended...");
}
}
}
あらかじめお断りしておきますが、このプログラムは実行すると例外を発生して終了します。といっても、PDFファイルが作れないわけではなく、「中身がない」ためです。ですから、実行すると、例外は発生しますが、サイズ0バイトのPDFファイルが作られているはずです。
PDFファイルの作成は、いくつかのクラスの組み合わせによって行われます。最低限、必要となるのは、以下のようなものです。
・PdfWriterクラス。PDFデータの書き出しを行うためのものです。
・OutputStreamクラス。PdfWriterでのデータの出力先として用意します。
・Documentクラス。PDFのドキュメントのクラス。ここに具体的な内容を記述していきます。
今回はファイルに保存をしますので、OutputStreamクラスとして、FileOutputStreamとBufferedOutputStreamを用意しておきます。では、全体の流れを追っておきましょう。
FileOutputStream out = null;
BufferedOutputStream bout = null;
PdfWriter writer = null;
Document doc = null;
まず、OutputStream関係とPdfWriter、描画用のDocumentのインスタンスを収める変数を用意しておきます。まぁ、これらは常にすべてこうした形で用意する必要はありませんが、ここではわかりやすくするために最初にすべて用意しておきました。
out = new FileOutputStream("test.pdf");
bout = new BufferedOutputStream(out);
では、OutputStream関係のインスタンスの準備から行いましょう。ここでは、保存するファイル名を指定してFileOutputStreamを作成し、これを使ってBufferedOutoutStreamを作成しておきます。
doc = new Document(new Rectangle(0,0,500,500));
続いて、Documentインスタンスを作成します。これは、PDFドキュメントのオブジェクトです。このDocumentに、実際にPDFの表示内容を組み込んでいくことになります。これは、引数なしでそのまま作成もできますが、Rectangleを使ってドキュメントの大きさを引数に指定することもできます。ここでは500×500の大きさでドキュメントを作成しています。
writer = PdfWriter.getInstance(doc, bout);
下準備の最後の作業になります。PdfWriterインスタンスを作成します。これはnewは使えないため、getInstanceを呼び出してインスタンスを取得します。ここでは、あらかじめ用意しておいたPdfWriterとOuputStreamのインスタンスをそれぞれ引数に指定します。これにより、第1引数で指定したDocumentの内容を第2引数のOutputStreamに出力するためのPdfWriterインスタンスが準備できます。
doc.open();
doc.close();
後は、実際にドキュメントの作成を行うだけです。ドキュメントは、Documentの「open」を呼び出してドキュメントを開き、各種の描画などを行って後、「close」でドキュメントを閉じて完了します。ここでは何もしていませんが、要は「openした後で、どうやってドキュメントの内容を書いていくか」がわかれば、PDFのドキュメントを作れるようになる、というわけです。