有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我使用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) 个答案