在Tomcat中使用PDFBox时为空BufferedImage

时间:2014-07-29 17:47:53

标签: java tomcat pdf pdfbox javax.imageio

我正在尝试在Tomcat 7和Java 6上作为Webservelet运行的Java应用程序中使用PDFBox。我已经成功地将我的代码作为已编译的JAR运行,该JAR可以处理我提供给应用程序的几个不同的测试文件。但是,当我尝试在Tomcat上将其用作WAR文件时,会引发一些错误。

PDFBox似乎无法访问我提供给应用程序的PDF文件中的图像。 PDF文件从磁盘加载到tomcat实例可访问的目录读/写中。 PDF的结构似乎是由PDFBox检测到的。但是,当我尝试使用下面的代码访问PDF中的图像时,getRGBImage()会返回null。但是,这仅适用于服务器,因为相同的代码在作为JAR运行时成功返回BufferedImage

PDResources resources = page.getResources();
Map<String, PDXObject> pageImages = resources.getXObjects();
if (pageImages != null) {
    Iterator<String> imageIter = pageImages.keySet().iterator();
    while( imageIter.hasNext() ) {
        String key = (String)imageIter.next();
        PDXObject xobject = pageImages.get( key );
            PDXObjectImage image = null;
            if (xobject instanceof PDXObjectImage) {
                image = (PDXObjectImage) xobject;
            } else {
                continue;
            }
        // Save image as a separate file
        BufferedImage pdfImage = image.getRGBImage();
        if (pdfImage == null) {
            logger.error("Null image.");
            continue;
        }
        File outFile = new File(this.temporary + "out" + this.imageIdx + ".png");
        ImageIO.write(pdfImage, "png", outFile);
    }
}

如果允许继续ImageIO.write(),PDFBox将抛出有关org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap对象为空的异常。可能导致这个问题的原因是什么?

编辑:如果删除continue;,以下代码显示上述代码的异常输出。

3298 [PDFWorker:0] ERROR org.apache.pdfbox.pdmodel.graphics.xobject.PDPixelMap  - Something went wrong ... the pixelmap doesn't contain any data.
java.lang.NullPointerException
    at asdf.ImageOCRProcessor.doHOCR(ImageOCRProcessor.java:69)
    at asdf.PDFExtractor.endPage(PDFExtractor.java:329)
    at org.apache.pdfbox.util.PDFTextStripper.processPage(PDFTextStripper.java:457)
    at org.apache.pdfbox.util.PDFTextStripper.processPages(PDFTextStripper.java:379)
    at org.apache.pdfbox.util.PDFTextStripper.writeText(PDFTextStripper.java:335)
    at asdf.PDFExtractor.processByParts(PDFExtractor.java:135)

0 个答案:

没有答案