我设法使用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();
似乎工作得更快但输出文件图像已损坏: