PDFBox 2.0.4:提取图像时的高内存使用率

时间:2017-01-30 17:30:08

标签: java pdf pdfbox

我设法使用PDFBOX 2.0.4从PDF文件中提取嵌入图像,并使用以下代码:

        for(int i = 0; i < document.getNumberOfPages() ;i++)
        {
            PDPage page = document.getPage(i);
            PDResources resources = page.getResources();

            PDImageXObject pageImg = null;
            Iterable<COSName> xObjectNames = resources.getXObjectNames();
            for (COSName cosName : xObjectNames)
            {
                PDXObject xObject = resources.getXObject(cosName);
                if (xObject instanceof PDImageXObject) 
                {
                    PDImageXObject img = (PDImageXObject) xObject;
                    BufferedImage pageBufferedImage = pageImg.getImage();


                    targetType = pageImg.getSuffix();

                    File imageFile = new File(out, String.valueOf(i+"."+targetType));

                    ImageIO.write(pageBufferedImage,targetType,imageFile);                  
                }
            }
        }

上面的代码工作正常,但是提取过程中的内存消耗和时间都很成问题(pdf文件包含数千页),使用BufferedImage会增加内存使用量并损害性能,我的唯一需要的是提取原始图像而不做任何改变。

我尝试使用

pdImageXObject.getStream().toByteArray(); 

pdImageXObject.createInputStream(); 

似乎工作得更快但输出文件图像已损坏:

Example of damaged image

0 个答案:

没有答案