簡體   English   中英

使用流進行Groupdocs轉換

[英]Groupdocs conversion using streams

我需要能夠將.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或其任何參數都不為空。

com.groupdocs.conversion.converter.a。(ConversionHelper.java:31)處的java.lang.NullPointerException com.groupdocs.conversion.handler.ConversionHandler.convertToImage(ConversionHandler.java:127)處的java.lang.NullPointerException

我對此進行了一些研究,但是我所能找到的相對缺乏的文獻資料造成了一些限制。 例如,此頁面:

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

...在此摘要中肯定地表明這是可能的,至少在理論上是這樣的:

/ ** *將1個文檔頁面轉換為圖像
*在這種類型的轉換中,convertToImage返回帶有轉換文件的OutputStream
*注意:轉換后的文件不會保存在本地目錄中
*要使用這種類型的轉換,必須在ImageSaveOptions中設置“頁面”和“ saveToStream”參數
* convertToImage方法也可以接收InputStream作為參數
*有關更多信息,請參見JavaDoc。
* @param conversionHandler ConversionHandler實例* @param頁面頁碼* / public void convertToStream(ConversionHandler conversionHandler,int page){ImageSaveOptions imageSaveOptions = new ImageSaveOptions(); imageSaveOptions.setSaveFileType(ImageSaveOptions.PNG); imageSaveOptions.setPage(page);

    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嗎?

我離開了一段時間,但今天又回到了。

這是我的解決方案:

public class RenderImages {
private static final Log log = LogFactory.getLog(RenderImages.class);

public static void generateRenderedImages(Datastore datastore,
    InputStream inputStream,
    String fileName,
    ConversionHandler conversionHandler,
    SystemProperties systemProperties,
    Logger logger) {

    int thumbnailHeight = systemProperties.getAsInteger("RENDER_THUMBNAIL_HEIGHT");
    int thumbnailWidth = systemProperties.getAsInteger("RENDER_THUMBNAIL_WIDTH");
    String contentTypePreview = systemProperties.get("RENDER_CONTENT_TYPE_PREVIEW");
    String contentTypeThumbnail = systemProperties.get("RENDER_CONTENT_TYPE_THUMBNAIL");

    try {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        IOUtils.copy(inputStream, outputStream);
        byte[] imageBytes = outputStream.toByteArray();
        inputStream.close();

        ImageSaveOptions imageSaveOptions = new ImageSaveOptions();
        imageSaveOptions.setSaveFileType(ImageSaveOptions.JPEG);
        imageSaveOptions.setPage(1);

        ByteArrayOutputStream previewStream = conversionHandler.convertToImage(new ByteArrayInputStream(imageBytes),
            fileName + ".pdf",
            imageSaveOptions);

        saveToDatabase(datastore, previewStream, contentTypePreview, fileName);
        previewStream.close();

        imageSaveOptions.setHeight(thumbnailHeight);
        imageSaveOptions.setWidth(thumbnailWidth);

        ByteArrayOutputStream thumbnailStream = conversionHandler.convertToImage(
            new ByteArrayInputStream(imageBytes),
            fileName + ".pdf",
            imageSaveOptions);

        saveToDatabase(datastore, thumbnailStream, contentTypeThumbnail, fileName);
        thumbnailStream.close();
    } catch (Exception e) {
        e.printStackTrace();
        log.error("Image rendering failed); error = " + e.getMessage());
        logger.writeLog("Image rendering failed); error = " + e.getMessage());

    } finally {
        // maybe need something here, not sure yet
    }
}

private static void saveToDatabase(Datastore datastore,
    ByteArrayOutputStream image, String contentType, String fileName) throws IOException {

    RenderedImage renderedImage = datastore.find(RenderedImage.class)
        .filter("attachmentId", fileName)
        .filter("contentType", contentType)
        .get();

    if (renderedImage == null) {
        renderedImage = new RenderedImage();
        renderedImage.setAttachmentId(fileName);
        renderedImage.setContentType(contentType);
        renderedImage.setContent(image.toByteArray());
        datastore.save(renderedImage);
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM