JavaでPDFファイルを出力する(iTextライブラリ)【テキスト自由配置編】

前回は「iText」を使用して、文字列が1つだけ表示されるPDFを作成した。
ただ、文字が表示される位置は、PDFの左上に固定されていた。
今回は、文字列を自由な位置に配置する方法を紹介する。

ポイントは、「PdfWriter」より「PdfContentByte」を取得し、「PdfContentByte」オブジェクトに対して、表示座標を設定することである。
(座標は左下が原点となる)

<ソースコード>

package jp.co.smp.pdf.action;

import java.io.FileOutputStream;
import java.io.IOException;
import org.seasar.struts.annotation.Execute;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;

public class IndexAction {
	
	@Execute(validator = false)
	public String index() {
		return "index.jsp";
	}
	
	@Execute(validator = false)
	public String createPdf() throws DocumentException, IOException{
		
		//文書オブジェクトを生成
		Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
		
		//出力先(アウトプットストリーム)の生成
		FileOutputStream fos = new FileOutputStream("C:\\temp\\test.pdf");
		
		//アウトプットストリームをPDFWriterに設定
		PdfWriter pdfwriter = PdfWriter.getInstance(doc, fos);
		
		//フォントの設定
		//Font font = new Font(BaseFont.createFont("HeiseiKakuGo-W5",
		//		"UniJIS-UCS2-H",BaseFont.NOT_EMBEDDED),15,Font.BOLD);
		BaseFont baseFont = BaseFont.createFont("HeiseiKakuGo-W5",
				"UniJIS-UCS2-H",BaseFont.NOT_EMBEDDED);
		
		
		//文章オブジェクト オープン
		doc.open();
		
//↓↓↓↓↓ 今回変更部分 ↓↓↓↓↓
		
		//PdfContentByteの取得
		PdfContentByte pdfContentByte = pdfwriter.getDirectContent();
		
		//テキストの開始
		pdfContentByte.beginText();
		
		//フォントとサイズの設定
		pdfContentByte.setFontAndSize(baseFont, 17);
		
		//表示位置の設定
		pdfContentByte.setTextMatrix(300, 300);
		
		//表示する文字列の設定
		pdfContentByte.showText("テキストの位置を自由に配置する");
		
		//テキストの終了
		pdfContentByte.endText();
		
//		//PDF文章に文字列を追加
//		doc.add(new Paragraph("PDF作成", font));
		
//↑↑↑↑↑ 今回変更部分 ↑↑↑↑↑
		
		//文章オブジェクト クローズ
		doc.close();
		
		//PDFWriter クローズ
		pdfwriter.close();
		
		return null;
	}
}

[解説]

  • 「PdfContentByte#beginText」でテキストの開始を宣言する。
  • 「PdfContentByte#setFontAndSize」でフォントを設定する。
  • 「PdfContentByte#setTextMatrix」で表示する座標を設定する。(左下が原点)
  • 「PdfContentByte#showText」で表示する文字列を設定する。
  • 「PdfContentByte#endText」でテキストの終了を宣言する。

<実行結果>
実行すると、フォルダ「C:\temp」に「test.pdf」が作成される。

<関連記事>
JavaでPDFファイルを出力する(iTextライブラリ)【準備編】
JavaでPDFファイルを出力する(iTextライブラリ)【出力編】
JavaでPDFファイルを出力する(iTextライブラリ)【テキスト自由配置編】
JavaでPDFファイルを出力する(iTextライブラリ)【画像配置編】
JavaでPDFファイルを出力する(iTextライブラリ)【図形配置編】
JavaでPDFファイルを出力する(iTextライブラリ)【図形配置編2】
JavaでPDFファイルを出力する(iTextライブラリ)【表配置編】

<お勧め書籍>