JavaのPDFBoxでpdfからjpgに変換する

JavaのPDFBoxでpdfからjpgに変換する

前提
Java 1.7
PDFBox 2.0.23

pdfをページごとにjpgに変換したかったのでPDFBoxライブラリを使ってjpgに変換してみました。

PDFBox2系でPDPage.convertToImagePDFImageWriterが廃止されたようです。

また、ImageIOUtilクラスはpdfbox-tools-x.x.x.jarに移動しています。

PDFRendererクラスのrenderImageWithDPIメソッドが遅い

renderImageWithDPIメソッドの呼び出しがかなり時間がかかります。

第一引数はページインデックスで、ゼロ基底です。

第二引数はDPIを指定します。300や600などです。

第三引数はImageTypeを指定します。

このメソッドはオーバーロードで2つメソッドがありますので、第三引数を省略した場合はデフォルトはImageType.RGBとなります。

サンプル

package jp.co.confrage;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.io.MemoryUsageSetting;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.imageio.ImageIOUtil;

public class Sample {
  static long startTime = System.currentTimeMillis ();

  public static void main(String[] args) {
    logTime("start.");
    try (PDDocument doc = PDDocument.load(new File("sample.pdf"), MemoryUsageSetting.setupTempFileOnly())) {
      int i = 0;
      PDFRenderer pdfRenderer = new PDFRenderer(doc);
      for (PDPage page : doc.getPages()) {
        logTime("renderImageWithDPI start.");
        BufferedImage image = pdfRenderer.renderImageWithDPI(i, 300, ImageType.RGB);
        logTime("renderImageWithDPI end.");
        ImageIOUtil.writeImage(image, String.format("%03d.jpg", i++), 300);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    logTime("end.");
  }

  public static void logTime (String msg) {
    long now = System.currentTimeMillis ();
    System.out.println (String.format ("%.3f ms: %s", (now - startTime) / 1000.0, msg));
    startTime = now;
  }
}

ghostscriptでラスタライズするのと比較するとrenderImageWithDPIメソッドは遅いようです。

jvmメモリ割り当てで速度改善できるか

jvmに結構なメモリ割り当てたら速度改善できるかと思って試してみましたが、速度改善できませんでした。

やはりImagemagickが良いようですが、ghostscriptのライセンスがGPL(AGPL)なのがネックとなるようです。

参考サイト

Apache PDFBox | PDFBox 2.0.0 Migration Guide
The Apache PDFBox™ library is an open source Java tool for working with PDF documents. This project allows creation of n...

コメント

タイトルとURLをコピーしました