使用流

时间:2015-08-27 13:40:26

标签: java mongodb nullpointerexception groupdocs

我需要能够将.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)

我已经对此做了一些研究,但是我能找到的相对缺乏的文档已经创造了一些限制。例如,此页面:

https://github.com/groupdocs/groupdocs-conversion-java-maven-sample/blob/master/src/main/java/com/groupdocs/conversion/maven/converters/ToImageSampleConversion.java

...在这个片段中肯定地表明这是可能的,至少在理论上如何:

  

/ **        *将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?

0 个答案:

没有答案