我正在尝试在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)