【Java】PDFBoxでTiff画像をPDFに埋め込む
PDFBoxを触っていくうちに何となくJavaの書き方がわかってきたか?
背景
そこにTiff画像がある、これをPDFにしたいのだ。というニーズに答えたい。
課題
このサイトに従ってPNG画像をPDF化できたので、Tiffも同じようにできるかと思ったらできなかった。
原因
よくわからんけど、ここを見て、「いま扱ってるFITTファイルがT4/T6圧縮ではなかったんだな」と思っている。
対策
PDImageXObject.createFromFile
の代わりにLosslessFactory.createFromImage
を使って画像オブジェクトを生成した。
例
package jp.samplepkg;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
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.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class Sample01 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
try {
// 空のドキュメントオブジェクトを作成します
PDDocument document = new PDDocument();
// 新しいページのオブジェクトを作成します
PDPage page = new PDPage();
document.addPage(page);
// 画像オブジェクトを作成する
BufferedImage img = ImageIO.read(new File("/Path/to/Image/image.tiff"));
PDImageXObject image = LosslessFactory.createFromImage(document, img);
// 出力用のストリームを開いて画像を描写する
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(image, 50, 50, image.getWidth(), image.getHeight());
// ストリームを閉じる
contentStream.close();
// ドキュメントを保存します
document.save("sample.pdf");
document.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}