Javaプログラミング/Javaプログラミング関連情報

JavaでPDFを作成しよう!(4ページ目)

オープンソースの「iText」ライブラリを使って、JavaでPDFファイルを作成してみましょう。

執筆者:掌田 津耶乃

グラフィックを作成する


今度は、グラフィックを作成してドキュメントに組み込んでみることにしましょう。実は、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を生成できれば、いろいろと応用ができそうですね。
【編集部おすすめの購入サイト】
楽天市場で Java 関連の書籍を見るAmazon で Java 関連の書籍を見る
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます