使用流解析器从PDF文件提取图像

时间:2019-06-28 19:07:26

标签: java pdf pdfbox

我正在使用Apache PDFBox从大型PDF文件提取图像。 (使用PDFBox并不是硬性要求。Aspose.PDF或其他API也可以。)

当前,我将文件解析为PDDocument,然后遍历页面以查找图像:

ArrayList<byte[]> imageDataList = new ArrayList<>();

try (PDDocument document = PDDocument.load(new File(filePath))) {
    PDPageTree list = document.getPages();
    for (PDPage page : list) {
        PDResources pdResources = page.getResources();
        for (COSName c : pdResources.getXObjectNames()) {
            PDXObject o = pdResources.getXObject(c);
            if (o instanceof PDImageXObject) {
                PDImageXObject pdImage = (PDImageXObject) o;
                ByteArrayOutputStream baos = new ByteArrayOutputStream());
                BufferedImage image = pdImage.getImage();
                ImageIO.write(image, "jpg", baos);
                imageDataList.add(baos.toByteArray());
            }
        }
    }
}

这可行,但占用大量内存。有没有一种方法可以提取图像而不将整个文档解析到内存中?我看到有一个流解析器PDFStreamParser,但是我不了解PDF内部原理,也不知道该如何处理PDFStreamParser.parseNextToken()返回的对象。

0 个答案:

没有答案