2018.8.7

PDFBoxを使ってPDFファイルを画像ファイル(JPEG)に変換する

PDFBox2を使ってPDFファイルを画像ファイル(JPEG)に変換したいことがあったので、その時のメモになります。

目次

  • 必要なライブラリ
  • コード
  • 参考リンク

必要なライブラリ

必要なライブラリは以下の通り。

  • pdfbox-2.0.11.jar
  • pdfbox-tools-2.0.11.jar
  • fontbox-2.0.11.jar
  • commons-logging-1.2.jar

PDFBox関連のライブラリは、Apache PDFBox | Downloadsから、loggingはDownload Apache Commons Loggingからダウンロードできるようです。

loggingのライブラリがない場合、実行時に以下のエラーが出力されます。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	at org.apache.pdfbox.pdmodel.PDDocument.<clinit>(PDDocument.java:95)
	at Example01.main(Example01.java:20)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

各ライブラリをダウンロードしたら、ビルド・パスを設定します。

コード

PDFファイルから画像ファイル(JPEG)に変換するコードは以下の通りです。


import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;

public class Example01 {
	public static void main(String[] args) {
		try {
			File file = new File("test.pdf");

			InputStream in = new FileInputStream(file);
			PDDocument doc = PDDocument.load(in);

			PDFRenderer pdfRenderer = new PDFRenderer(doc);
			for (int i = 0; i < doc.getNumberOfPages(); i++) {
				BufferedImage image = pdfRenderer.renderImageWithDPI(i, 180, ImageType.RGB);
				ImageIOUtil.writeImage(image, "test.jpg", 180, 0.5f);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

上記のコードでは、解像度180dpi、品質50%で画像ファイルを出力しています。

普段は解像度(DPI)の指定はあまり使わないので、最終的な画像の大きさ(ピクセルサイズ)がどれくらいになるか分からないと思いますが、ピクセルと解像度(dpi)のサイズ計算式/サイズ早見表を利用すると簡単に計算できます。

参考リンク

Java】関連記事