我需要能够将.pdf文档转换为预览/缩略图图像以供日后检索。它现在在我的解决方案中工作,目前涉及将新文件转储到监视文件夹,将转换后的文件写入磁盘,然后将它们推送到MongoDB集合中。但我想在不将任何文件写入磁盘的情况下这样做。 (图像文件本身将进入MongoDB集合,生成图像文件的内容来自不同的MongoDB集合。)我使用groupdocs转换来执行此操作。
我有一个类检索内容并将其作为InputStream传递到另一个类,其感兴趣的方法如下:
public void generateRenderedImages(InputStream inputStream, String fileName, ConversionHandler conversionHandler) {
File previewImage = null;
File thumbnailImage = null;
File parent = null;
try {
ImageSaveOptions imageSaveOptions = new ImageSaveOptions();
imageSaveOptions.setSaveFileType(ImageSaveOptions.JPEG);
imageSaveOptions.setPage(1);
imageSaveOptions.setHeight(THUMBNAIL_HEIGHT);
imageSaveOptions.setWidth(THUMBNAIL_WIDTH);
imageSaveOptions.setSavePath(null);
// generate preview image
imageSaveOptions.setSaveName("blah.jpg");
OutputStream outputStream = conversionHandler.convertToImage(inputStream, fileName, imageSaveOptions);
saveToDatabase(outputStream, CONTENT_TYPE_PREVIEW, fileName);
imageSaveOptions.setHeight(THUMBNAIL_HEIGHT);
imageSaveOptions.setWidth(THUMBNAIL_WIDTH);
outputStream.close();
outputStream = conversionHandler.convertToImage(inputStream, fileName, imageSaveOptions);
saveToDatabase(outputStream, CONTENT_TYPE_THUMBNAIL, fileName);
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
log.error("Image rendering failed); error = " + e.getMessage());
resLogger.writeLog("Image rendering failed); error = " + e.getMessage());
} finally {
// maybe need something here, not sure yet
}
}
问题在于我在conversionHandler.convertToImage(...)行抛出NullPointerException - 堆栈跟踪的相关部分将跟随 - 即使conversionHandler及其任何参数都不为null
显示java.lang.NullPointerException 在com.groupdocs.conversion.converter.a。(ConversionHelper.java:31) 在com.groupdocs.conversion.handler.ConversionHandler.convertToImage(ConversionHandler.java:127)
我已经对此做了一些研究,但是我能找到的相对缺乏的文档已经创造了一些限制。例如,此页面:
...在这个片段中肯定地表明这是可能的,至少在理论上如何:
/ ** *将1个文档页面转换为图像
*在这种类型的转换中,convertToImage返回带有转换文件
的OutputStream *注意:转换后的文件不保存在本地目录中 *要使用此类转换'页面'和' saveToStream'必须在ImageSaveOptions中设置参数 * convertToImage方法也可以接收InputStream作为参数
*有关详细信息,请参阅JavaDoc * @param conversionHandler ConversionHandler实例 * @param页面页码 * / public void convertToStream(ConversionHandler conversionHandler,int page){ ImageSaveOptions imageSaveOptions = new ImageSaveOptions(); imageSaveOptions.setSaveFileType(ImageSaveOptions.PNG); imageSaveOptions.setPage(页);
OutputStream outputStream = conversionHandler.convertToImage(PDF_FILE, imageSaveOptions);
//do something with the stream
不幸的是没有setSaveToStream()方法,但是我从这个页面找到了:
http://groupdocs.com/Community/files/9/java-libraries/groupdocs_conversion_for_java/entry5343.aspx
在之前的版本中删除了它:
公共Api更改 ... com.groupdocs.conversion.option.SaveOptions 删除了方法setSaveToStream以简化选项参数。 现在将结果文档保存到流输出只是不要设置SaveOptions.setSavePath或将其设置为null。
所以我不必显式设置saveToStream属性,我只需要确保savePath为null。我已经做了,但问题仍然存在。我已尝试过设置/不设置属性的所有其他组合,所有这些都具有相同的结果。
我正在使用1.2.0版本的groupdocs转换。以前任何人都看到了这一点,并且知道为什么在没有任何东西时我可能会获得NPE?