java - pdfbox.util.ImageIOUtil.writeImage 问题

标签 java pdfbox


这里 PDFbox 出现问题。

java.lang.NullPointerException
    at org.apache.pdfbox.util.ImageIOUtil.writeImage(ImageIOUtil.java:197)
    at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.createImageStream(PDJpeg.java:190)
    at org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg.<init>(PDJpeg.java:150)

我们当前的设置是 2 台服务器,每台服务器有 2 个 JVM,运行在 Websphere 8.5Java 6 上。

当我们重新启动 JVM 时,问题似乎得到了解决,但几个小时后我们遇到了相同的异常。
该应用程序正在使用PDFBox v1.8.8

这是一段代码:

ImageIO.setUseCache(false);
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
document.addPage(page);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage convertedFile = tiffToBufferedImageJAI(file);
PDXObjectImage img = new PDJpeg(document, convertedFile);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawXObject(img, 0, 0, 550, 800);
contentStream.close();

document.save(baos);
document.close();
baos.flush();

return baos.toByteArray();

最佳答案

问题是下面的 ImageWriter 已注册但无法正确启动:

com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageWriterSpi

因此,当调用 ImageWriterIterator.next() 时,spi.createWriterInstance() 抛出静默 IOException 并返回 null:

public ImageWriter next() {
        ImageWriterSpi spi = null;
        try {
                spi = (ImageWriterSpi)iter.next();
                return spi.createWriterInstance();
        } catch (IOException e) {
                // Deregister the spi in this case, but only as a writerSpi
                theRegistry.deregisterServiceProvider(spi, ImageWriterSpi.class);
        }
        return null;
}

spi.createWriterInstance() 失败的原因是:

java.lang.NoClassDefFoundError: com/sun/medialib/codec/jpeg/Encoder

在 JVM 启动中添加 -Dcom.sun.media.jai.disableMediaLib=true 使得有问题的 ImageWriter 不再被注册。

关于java - pdfbox.util.ImageIOUtil.writeImage 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096992/

相关文章:

java - 180 度和 270 度不调用 onConfigurationChanged

java - 图像数据不足(生成 PDF 文件)

java - 使用 PDFBox 从单个 PDF 页面中提取多个嵌入图像

java - 从PDF过滤出超过特定字体大小的所有文本

java - 使用 pdfBox 提取 OpenTypeFont 文本的问题

java - 无法通过类方法更改对象的值

java - 我的链接列表的 toString() 方法仅打印第一个元素

java - 无法将 css 链接到 jsp(Spring mvc)

java - Google Cloud Datastore 中的二维数组对象

java - 如何修复 "Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed"