Я конвертирую первую страницу файла docx в изображение за два шага, используя dox4j и pdfbox, но в настоящее время каждый раз получаю OutOfMemoryError
.
Я смог определить, что исключение выдается на самом последнем шаге этого процесса, когда вызывается метод convertToImage
, однако я уже некоторое время использую второй шаг этого метода для преобразования PDF-файлов без проблем. поэтому я не понимаю, что может быть причиной, если, возможно, dox4j не кодирует pdf, который я еще не тестировал или поврежден.
Я попытался заменить ByteArrayOutputStream
на 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();
Изменить Чтобы дать больше информации об этой ситуации, этот код запускается в веб-приложении Grails. Я пробовал несколько различных вариантов этого кода, в том числе обнуление всего, что больше не нужно, использование FileInputStream и FileOutputStream, чтобы попытаться сохранить больше физической памяти и проверить вывод docx4j и pdfbox, каждый из которых работает правильно.
Я использую docx4j 2.8.1 и pdfbox 0.7.3, я также пробовал pdf-renderer, но все равно получаю ошибку OutOfMemoryError. Я подозреваю, что docx4j использует слишком много памяти, но не выдает ошибку до преобразования pdf в изображение.
Я бы с удовольствием исключил альтернативный способ преобразования файла docx в pdf или непосредственно в изображение в качестве ответа, однако в настоящее время я пытаюсь заменить jodconverter, который было проблематично запускать на сервере.
convertToImage
, потому что я могу взять обработанный файл PDF из docx4j после сбоя и повторить попытку только с PDF, и он работает нормально. - person Godwin   schedule 12.10.2012