本連載では Java で PDF を操作できる Apache PDFBox について解説します。 前回は PDF に文字を表示する方法について概要を解説しました。 今回は画像を PDF に表示する方法について解説します。
画像を表示してみよう
それではさっそく PDF に画像を埋め込んで表示してみましょう。 本稿はお仕事でご覧になっている方が多いと思いますので、今回は帳票を想定して、別稿「Java ライブラリ Barcode4J でバーコードを生成しよう」で作成したバーコード画像を埋め込んでみようと思います。
プログラムの全体は次のようになります。
package sample.pdfbox;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class Main {
public static void main(String args[]) {
try {
// 空のドキュメントオブジェクトを作成します
PDDocument document = new PDDocument();
// 新しいページのオブジェクトを作成します
PDPage page = new PDPage();
document.addPage(page);
// 画像オブジェクトを作成する
PDImageXObject image = PDImageXObject.createFromFile("barcode.png", document);
// 出力用のストリームを開いて画像を描写する
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(image, 150, 350, image.getWidth(), image.getHeight());
// ストリームを閉じる
contentStream.close();
// ドキュメントを保存します
document.save("image.pdf");
document.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
ソースコードの解説
PDImageXObject クラスの createFromFile メソッドにファイル名を指定することで、画像オブジェクトを作成できます。
PDImageXObject image = PDImageXObject.createFromFile("barcode.png", document);
読み込んだ画像をページに埋め込むには、drawImage メソッドに画像オブジェクトを指定します。 第二・第三引数は画像の表示位置を、第四・第五引数は画像の大きさを指定します。
// 第一引数 : 画像オブジェクト
// 第二引数 : 表示位置 (横)
// 第三引数 : 表示位置 (縦)
// 第四引数 : 表示する画像の幅
// 第五引数 : 表示する画像の高さ
contentStream.drawImage(image, 150, 350, image.getWidth(), image.getHeight());
このプログラムを実行すると、image.pdf というファイル名の右図のような PDF が出力されます。(クリックで拡大) 埋め込んだバーコードがページの左下に表示されているのがわかります。
おわりに
今回は PDFBox を利用して文字を PDF に表示する方法について解説しました。 次回は罫線を表示する方法について解説したいと思います。