JavaでPDFファイルを出力する(iTextライブラリ)【画像配置編】
今回は、「iText」を使用して、画像付のPDFを作成する方法を紹介する。
準備として、「C:\temp」フォルダ内に、PDFに挿入する「img.jpg」ファイルを格納しておく。
<手順概要>
- Imageインスタンスの作成
- Imageインスタンスに対して表示座標の設定
- Imageインスタンスに対して表示サイズの設定
- PdfContentByteの取得
- 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"));
<お勧め書籍>