dox4jとpdfboxを使用して2つのステップでdocxファイルの最初のページを画像に変換していますが、現在はOutOfMemoryError
毎回取得しています。
convertToImage
メソッドが呼び出されている間、このプロセスの最後のステップで例外がスローされることを確認できましたが、このメソッドの2番目のステップを使用して、しばらくの間問題なくpdfを変換してきました。おそらくdox4jがpdfをエンコードしていない限り、何が原因であるかについて私は途方に暮れています。これは、私がまだテストしていないか、破損している方法です。
ByteArrayOutputStream
をaに置き換えてみましたがFileOutputStream
、PDFが正しくレンダリングされるようですが、予想よりも大きくはありません。
これは私が使用しているコードです:
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(file);
org.docx4j.convert.out.pdf.PdfConversion c = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);
((org.docx4j.convert.out.pdf.viaXSLFO.Conversion)c).setSaveFO(File.createTempFile("fonts", ".fo"));
ByteArrayOutputStream os = new ByteArrayOutputStream();
c.output(os, new PdfSettings());
byte[] bytes = os.toByteArray();
os.close();
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
PDDocument document = PDDocument.load(is);
PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(0);
BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_RGB, 96);
is.close();
document.close();
編集 この状況についてより多くのコンテキストを提供するために、このコードはgrailsWebアプリケーションで実行されています。FileInputStreamとFileOutputStreamを使用して、より多くの物理メモリを節約し、docx4jとpdfboxの出力を検査するなど、このコードのいくつかの異なるバリアントを試しました。それぞれが正しく機能しているようです。
docx4j2.8.1とpdfbox0.7.3を使用しています。pdf-rendererも試しましたが、それでもOutOfMemoryErrorが発生します。私の疑いは、docx4jがメモリを使いすぎているが、PDFから画像への変換までエラーを生成しないということです。
答えとして、docxファイルをpdfまたは直接画像に変換する別の方法を除いて喜んでいますが、現在、サーバーでの実行に問題があったjodconverterを置き換えようとしています。