PDFBox サンプルプログラム

目次

PDFからページの画像を取得する

ソフトマスクのあるページで取得したJPEGがそのまま使えなかったので、こちらからページのイメージを取得する.


try {
    
    //PDFドキュメントをロード
    PDDocument document = PDDocument.load("hogehoge.pdf");
    
    //ページのリストから最初の1ページを取得する
    PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(0);
    
    //ページからリソースを取得し、全てのイメージを取得する。
    PDResources resources = page.getResources();
    Map images = resources.getImages();
    if (images != null) {
        Iterator imageIter = images.keySet().iterator();
        while (imageIter.hasNext()) {
            String key = (String) imageIter.next();
            PDXObjectImage image = (PDXObjectImage) images.get(key);
            PDRectangle cropBox = page.findCropBox();
            if (cropBox != null) {
                //dpiの算出(pdfのデフォルトdpiは72)
                int dpi = Math.round(image.getHeight() * 72 / cropBox.getHeight());
                //dpiのサイズに変換しつつイメージ取得
                BufferedImage bufferedImage = page.convertToImage(BufferedImage.TYPE_3BYTE_BGR, dpi);
                File outputfile = new File(System.currentTimeMillis() + "_hoge.jpg");
                ImageIO.write(bufferedImage, "jpg", outputfile);
            }
        }
    }
    document.close();
} catch (IOException e) {
    e.printStackTrace();
}