30

pdfboxを使用してpdfから画像を抽出しようとしています。こちらのPDFの例

しかし、私は空白の画像のみを取得しています。

試しているコード:-

public static void main(String[] args) {
   PDFImageExtract obj = new PDFImageExtract();
    try {
        obj.read_pdf();
    } catch (IOException ex) {
        System.out.println("" + ex);
    }

}

 void read_pdf() throws IOException {
    PDDocument document = null; 
    try {
        document = PDDocument.load("C:\\Users\\Pradyut\\Documents\\MCS-034.pdf");
    } catch (IOException ex) {
        System.out.println("" + ex);
    }
    List pages = document.getDocumentCatalog().getAllPages();
    Iterator iter = pages.iterator(); 
    int i =1;
    String name = null;

    while (iter.hasNext()) {
        PDPage page = (PDPage) iter.next();
        PDResources resources = page.getResources();
        Map pageImages = resources.getImages();
        if (pageImages != null) { 
            Iterator imageIter = pageImages.keySet().iterator();
            while (imageIter.hasNext()) {
                String key = (String) imageIter.next();
                PDXObjectImage image = (PDXObjectImage) pageImages.get(key);
                image.write2file("C:\\Users\\Pradyut\\Documents\\image" + i);
                i ++;
            }
        }
    }

}

ありがとう

4

8 に答える 8

32

PDFからすべての画像のリストを取得するPDFBox 2.0.1を使用したコードを次に示します。これは、最上位から画像を取得しようとするのではなく、ドキュメントを再帰的に処理するという点で、他のコードとは異なります。

public List<RenderedImage> getImagesFromPDF(PDDocument document) throws IOException {
        List<RenderedImage> images = new ArrayList<>();
    for (PDPage page : document.getPages()) {
        images.addAll(getImagesFromResources(page.getResources()));
    }

    return images;
}

private List<RenderedImage> getImagesFromResources(PDResources resources) throws IOException {
    List<RenderedImage> images = new ArrayList<>();

    for (COSName xObjectName : resources.getXObjectNames()) {
        PDXObject xObject = resources.getXObject(xObjectName);

        if (xObject instanceof PDFormXObject) {
            images.addAll(getImagesFromResources(((PDFormXObject) xObject).getResources()));
        } else if (xObject instanceof PDImageXObject) {
            images.add(((PDImageXObject) xObject).getImage());
        }
    }

    return images;
}
于 2016-06-06T18:11:02.700 に答える
2

PDPage.convertToImage()PDFページをBufferedImageに変換できる関数を使用できます。次に、BufferedImageを使用してイメージを作成できます。

詳細については、次のリファレンスを使用してください。

  • Apache PDFBox1.8.3APIで取得できるPDFBoxのすべてのPDF実現クラス
  • ここでは、PDPage関連のドキュメントを見ることができます。

PDPage.convertToImage()また、PDPageクラスで関数を探すことを忘れないでください。

于 2013-01-20T07:17:40.753 に答える
2

.jpegをパスの末尾に追加するだけです。

image.write2file("C:\\Users\\Pradyut\\Documents\\image" + i + ".jpeg");

それは私にとってはうまくいきます。

于 2012-07-09T12:11:59.327 に答える