PDFBox Outofmemory при преобразовании PDF в Tiff, как сжимать изображения JPEG?
Я пытаюсь использовать изображения как новую страницу в файлах PDF, изображения JPEG слишком велики по размеру, хотя они добавляются нормально, но я сталкиваюсь с проблемой при преобразовании PDF в Tiff, исключение из памяти, есть ли способ сжать эти JPEG файлы
Ниже код для преобразования изображений в PDF
PDImageXObject image = PDImageXObject.createFromFile(imagePath, doc);
PDPage page = new PDPage(new PDRectangle(image.getWidth(), image.getHeight()));
doc.addPage(page);
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.drawImage(image, 0,0);
contents.close();
}
Ниже конвертировать в PDF в TIFF
document = PDDocument.load(new File(pdfFilename));
PDFRenderer pdfRenderer = new PDFRenderer(document);
BufferedImage[] images = new BufferedImage[document.getNumberOfPages()];
for (int i = 0; i < images.length; i++) {
PDPage page = (PDPage) document.getPage(i);
BufferedImage image;
try {
image = pdfRenderer.renderImageWithDPI(i, 300, ImageType.RGB); // its throwing outofmemory error at this line
images[i] = image;
} catch (IOException e) {
LOGGER.error("Exception while reading merged pdf file:" + e.getMessage());
throw e;
}
}
File tempFile = new File(tiffFileName+".tiff");
ImageWriter writer = ImageIO.getImageWritersByFormatName("TIFF").next();
ImageOutputStream output = ImageIO.createImageOutputStream(tempFile);
writer.setOutput(output);
ImageWriteParam params = writer.getDefaultWriteParam();
params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writer.prepareWriteSequence(null);
for (int i = 0; i < images.length; i++) {
params.setCompressionType("JPEG");
writer.writeToSequence(new IIOImage(images[i], null, null), params);
}
writer.endWriteSequence();
1 ответ
Чтобы избежать исключения нехватки памяти, попробуйте запустить приложение, передав ему параметры Xms и Xmx, используя подходящие значения. См. Этот пост. Каковы параметры Xms и Xmx при запуске JVM? и https://docs.oracle.com/cd/E21764_01/web.1111/e13814/jvm_tuning.htm:
Установка начального и минимального размера кучи
-Xms Oracle рекомендует установить минимальный размер кучи (-Xms), равный максимальному размеру кучи (-Xmx), чтобы минимизировать сборку мусора.
Установка максимального размера кучи
-Xmx Установка низкого максимального значения кучи по сравнению с объемом активных данных снижает производительность, вызывая частые сборки мусора.