JavaでPDFファイルを出力する(iTextライブラリ)【画像配置編】

今回は、「iText」を使用して、画像付のPDFを作成する方法を紹介する。

準備として、「C:\temp」フォルダ内に、PDFに挿入する「img.jpg」ファイルを格納しておく。


<手順概要>

  1. Imageインスタンスの作成
  2. Imageインスタンスに対して表示座標の設定
  3. Imageインスタンスに対して表示サイズの設定
  4. PdfContentByteの取得
  5. PdfContentByteのaddImageメソッドでImageインスタンスを文章に追加

<ソースコード>

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.Image;
import com.itextpdf.text.PageSize;
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);
		
		//文章オブジェクト オープン
		doc.open();
		
		
		//Imageインスタンスの作成
		Image img = Image.getInstance("C:\\temp\\img.jpg");
				
		//表示位置の設定(※)
		img.setAbsolutePosition(0, doc.getPageSize().getHeight() - 180);
		
		//表示サイズの設定
		img.scaleAbsolute(150, 180);
		
		//PdfContentByteの取得
		PdfContentByte pdfContentByte = pdfwriter.getDirectContent();
		
		//文章に画像を追加する
		pdfContentByte.addImage(img);
		
		
		//文章オブジェクト クローズ
		doc.close();
		
		//PDFWriter クローズ
		pdfwriter.close();
		
		return null;
	}
}

※座標は左下が原点となるので、左上に画像を表示したい場合は、「文章の縦サイズ」から「画像の縦サイズ」引くY座標の補正が必要となる。

<実行結果>
実行すると、フォルダ「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ライブラリ)【表配置編】


<補足:画像の格納場所>
Seasarのプロジェクトの場合、使用する画像は、「src/main/resources」内に格納することもできる。その場合の修正点について、簡単に記載しておく。

「src/main/resources」配下に「image」フォルダを作成し、「img.jpg」画像を格納する。

Imageインスタンスの作成を下記の様に修正する。

//Imageインスタンスの作成
//Image img = Image.getInstance("C:\\temp\\img.jpg");
Image img = Image.getInstance(ResourceUtil.getResource("/image/img.jpg"));

<お勧め書籍>