【JAVA】PDFBoxで複数ページあるPDFを画像に変換する


Posted on 2023/8/5 at 06:30

Update on 2023/8/5 at 6:30


PDFBoxライブラリの準備

Mavenを使用する場合

Mavenプロジェクトのpom.xmlのdependenciesに以下を追記します。

		
<dependency>
	<groupId>org.apache.pdfbox</groupId>
	<artifactId>pdfbox</artifactId>
	<version>2.0.29</version>
</dependency>
		
		

jarライブラリを直接ダウンロードする場合

こちらのページからライブラリをダウンロードしてクラスパスに追加します。 最新版は3.0.0でしたがベータ版だったため今回は2.0.29のスタンドアロン版である「pdfbox-app-2.0.29.jar」をダウンロードしました。

サンプルコード

		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.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;

public class Pdf2JpgSample {

	public static void main(String[] args) {
		try {
    		PDDocument doc = PDDocument.load(new File("input.pdf"));
    		PDFRenderer pdfRenderer = new PDFRenderer(doc);
            int pageCount = doc.getPages().getCount();
            for (int i=0; i<pageCount; i++) {
                BufferedImage bim = pdfRenderer.renderImageWithDPI(i, 300, ImageType.RGB);
                String jpg = "output_" + Integer.toString(i+1) + ".jpg";
                ImageIO.write(bim, "JPEG", new File(jpg));
            }
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
	}

}
		

複数ページあるPDFでもそれぞれ画像に変換することが可能です。

renderImageWithDPIの第二引数はDPIですのでここの数値を増やせば、解像度もよくなります。色数の少ない文書などであれば200でも十分そうです。

第三引数はImageTypeを指定します。グレースケールでいいのであればここはImageType.GRAYにします。省略した場合はImageType.RGBとなります。

関連記事

PDFファイルのパスワードをパスワードなしの状態で保存しておく方法

パスワードがかかっているPDFファイルをパスワードなしで保存する方法。Chromeを利用したお手軽4ステップの方法とJavaプログラミングで一発保存する方法について解説します。