後で取得するために、.pdf ドキュメントをプレビュー/サムネイル画像に変換できる必要があります。現在、新しいファイルを監視フォルダーにダンプし、変換されたファイルをディスクに書き込み、それらをMongoDBコレクションにプッシュするという私のソリューションで機能しています。しかし、ディスクにファイルを書き込まずにやりたいです。(画像ファイル自体は MongoDB コレクションに入り、画像ファイルが生成されるコンテンツは別の MongoDB コレクションから取得されます。)これを行うために groupdocs 変換を使用しています。
コンテンツを取得し、それを InputStream として別のクラスに渡すクラスが 1 つあります。そのメソッドは次のようになります。
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 ではありませんが、スタック トレースの関連部分が続きます。
com.groupdocs.conversion.converter.a の java.lang.NullPointerException (ConversionHelper.java:31) com.groupdocs.conversion.handler.ConversionHandler.convertToImage(ConversionHandler.java:127) の
これについていくつかの調査を行いましたが、見つけることができるドキュメントが相対的に不足しているため、いくつかの制限が生じています。たとえば、次のページです。
...このスニペットでは、これが可能であり、少なくとも理論的にはどのように行われるかを明確に示しています。
/** * 1 ドキュメント ページを画像
に変換 * このタイプの変換では、convertToImage は変換されたファイルを含む OutputStream を返します
* 注: 変換されたファイルはローカル ディレクトリに保存されません
* このタイプの変換を使用するには、'page' および 'saveToStream' パラメータが必要です。 ImageSaveOptions で設定
* convertToImage メソッドは InputStream をパラメーターとして受け取ることもできます
* 詳細については、JavaDoc を参照してください。
* @param conversionHandler ConversionHandler インスタンス * @param page ページ番号 */ 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 であることを確認するだけで済みます。私はこれを行いましたが、それでも問題は解決しません。プロパティを設定する/設定しないという他のすべての組み合わせを試しましたが、すべて同じ結果になりました。
groupdocs 変換のバージョン 1.2.0 を使用しています。誰もこれを前に見て、null がないときになぜ NPE が発生するのか知っていますか?