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();
这似乎工作得更快,但输出文件图像已损坏:
共 (0) 个答案