連載
» 2005年03月30日 10時00分 公開

JavaTips 〜Javaプログラミング編:フリーのライブラリを使いPDFを生成する

[佐藤匡剛,@IT]

 本TIPSで紹介するiTextは、PDFをJavaで扱うためのライブラリです。これを使えば、PDFファイルを作成したり、ブラウザにPDFを出力したりすることができます。しかもiTextはオープンソースで開発されており、使用に際してはMPLまたはLGPLのいずれかのライセンスを選択できます。

セットアップ

 iTextはjar形式のライブラリのため、必要なファイルをクラスパスへ追加するだけで利用できます。iTextの本体は、itext-x.x.jaです。これを以下のURLよりダウンロードしてください。

http://www.lowagie.com/iText/download.html

 ダウンロードできたら、このjarファイルをクラスパスへ追加します(最も簡単な方法は、Javaの拡張ディレクトリへjarファイルをコピーすることです)。

 これだけでiTextは利用可能ですが、本体には日本語フォント用の設定が含まれていません。日本語を扱うために、追加のライブラリiTextAsian.jarを以下のURLからダウンロードします。

http://itextpdf.sourceforge.net/

 ダウンロードしたら、これも同様にクラスパスへ追加します。以上でセットアップは完了です。

基本的な使い方

 iTextを使うには、基本的に以下の5つのステップを踏みます。

  1. 汎用の文書オブジェクトを生成
  2. 文書の出力形式(PDF/RTF/HTML/XMLより選択可能)と出力先を設定
  3. 文書の出力を開始
  4. 文書にテキスト/表/画像などの要素を追加
  5. 文書の出力を終了

 ここでは、動的に生成されたPDFをブラウザに表示する、ごく簡単なサーブレットをサンプルとして示します。

pdfServlet.java
package net.mogra.wings.javatips;

import java.io.FileNotFoundException;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfWriter;

public class PDFServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
    
    // 汎用の文書オブジェクトを生成
    Document doc = new Document(); (1)
    try {
      // 出力先を指定し、文書をPDFとして出力
      PdfWriter.getInstance(doc, byteOut); (2)
      // 出力開始
      doc.open(); (3)
      // 日本語フォントの設定
      Font font = new Font(BaseFont.createFont(
          "HeiseiKakuGo-W5",
          "UniJIS-UCS2-H",
          BaseFont.NOT_EMBEDDED));
      // 文書に要素を追加
      doc.add(new Paragraph("こんにちは、世界。", font)); (4)
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (DocumentException e) {
      e.printStackTrace();
    }
    // 出力終了
    doc.close(); (5)
    
    // ブラウザへの出力
    response.setContentType("application/pdf");
    response.setContentLength(byteOut.size());
    OutputStream out = response.getOutputStream();
    out.write(byteOut.toByteArray());
    out.close();
  }
}


 なお、iTextをスタンドアロンのアプリケーションで用いることも可能です。例えばPDFファイルを直接ファイルシステム上に書き出したい場合は、(2)でgetInstanceメソッドの第2引数にファイル出力ストリーム(java.io.FileOutputStream)を指定します。

 上記のサンプルサーブレットへアクセスすると、次のような結果が得られます。

サンプルコードの実行結果 サンプルコードの実行結果

Profile

WINGSプロジェクト

佐藤匡剛


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。