从png PDXObjectImage获取BufferedImage

3

我正在尝试从具有png后缀的PDXObjectImage获取BufferedImage:

PDResources pdResources = pdPage.getResources();
Map<String, PDXObject> xobjects = (Map<String, PDXObject>) pdResources.getXObjects();
if (xobjects != null) {
    for (String key : xobjects.keySet()) {
        PDXObject xobject = xobjects.get(key);
        if (xobject instanceof PDXObjectImage) {
            PDXObjectImage imageObject = (PDXObjectImage) xobject;
            String suffix = imageObject.getSuffix();
            if (suffix != null) {
                BufferedImage image = imageObject.getRGBImage();
            }
        }
    }
}

这段代码可以正常运行,但是对于png格式的PDXObjectImages,图片为null。

如何正确地从带有PNG后缀的PDXObjectImage中获取BufferedImage?

我也尝试过:

BufferedImage image = ImageIO.read(((PDPixelMap)imageObject).getPDStream().createInputStream());

但是图片仍为空。

我正在使用的是org.apache.pdfbox 1.8.11版本。


1
如果您得到任何日志消息?也许您需要安装jbig2解码器。顺便说一下,最新版本是2.0.2。 - Tilman Hausherr
@TilmanHausherr 我没有收到任何错误或警告,imageObject.getRGBImage() 只是返回 null。 - Ilias Stavrakis
请分享PDF文件。 - Tilman Hausherr
请确保您拥有可以解压缩该图像并继续使用getRGBImage()的JAI插件。顺便说一句,如果您能上传PDF文件,那将会非常有帮助。 - mhcuervo
1个回答

1

最终升级到了PDFBox的2.0版本,然后得到了一个明确的警告,即我没有安装jbig2解码器,并通过在Maven中添加以下依赖项来解决了这个问题。

<dependency>
    <groupId>com.levigo.jbig2</groupId>
    <artifactId>levigo-jbig2-imageio</artifactId>
    <version>1.6.5</version>
</dependency>

回复内容存在敏感词^**$Hausherr 谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接