OutOfMemoryError beim Konvertieren großformatiger Bilder in PDF mit Apache PDFBox [Duplikat]Java

Java-Forum
Guest
 OutOfMemoryError beim Konvertieren großformatiger Bilder in PDF mit Apache PDFBox [Duplikat]

Post by Guest »

Ich verwende Apache PDFBox, um Bilddateien in Java in das PDF-Format zu konvertieren. Hier ist ein Ausschnitt meines Codes:

Code: Select all

private static byte[] convertImageToPdf(byte[] imageBytes, String fileType) {
try (PDDocument document = new PDDocument()) {
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);

PDImageXObject image = PDImageXObject.createFromByteArray(document, imageBytes, fileType);
drawImageOnPage(document, page, image);

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
document.save(outputStream);
return outputStream.toByteArray();
} catch (Exception e) {
log.error("Failed to convert image to PDF", e);
throw new RuntimeException("Failed to convert image to PDF", e);
}
}
Für die meisten Bilder funktioniert es gut, aber bei Bildern mit sehr großen Abmessungen treten Fehlermeldungen wegen unzureichendem Arbeitsspeicher auf, selbst wenn die Dateigröße recht klein ist (z. B. 12.000 x 2.000 Pixel). Bild, das weniger als 10 MB groß ist). Ich habe bestätigt, dass über 200 MB freier Speicher verfügbar sind. Ich vermute daher, dass es eher an der Art und Weise liegt, wie PDFBox mit großen Dimensionen umgeht, als an der Gesamtspeicherverfügbarkeit?
Fehler:

Code: Select all

Caused by: javax.imageio.IIOException: Caught exception during read:
at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1851)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1466)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1363)
at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createFromByteArray(PDImageXObject.java:384)
at com.example.FileConverter.convertImageToPdf(FileConverter.java:106)
... 33 more

Caused by: java.lang.OutOfMemoryError: Java heap space
at java.desktop/java.awt.image.DataBufferByte.(DataBufferByte.java:93)
at java.desktop/java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:433)
at java.desktop/java.awt.image.Raster.createWritableRaster(Raster.java:1121)
at java.desktop/javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1066)
at java.desktop/javax.imageio.ImageReader.getDestination(ImageReader.java:2877)
at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1485)
at java.desktop/com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1844)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1466)
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1363)
at app.package.PdfImageProcessor.processImage(PdfImageProcessor.java:384)
at app.package.PdfImageProcessor.convertImageToPdf(PdfImageProcessor.java:106)
at app.package.PdfImageProcessor.convertFileToPdf(PdfImageProcessor.java:41)
at app.package.DocumentHandler.validateAndUpload(DocumentHandler.java:60)
at app.package.DocumentHandler_Subclass.validateAndUpload(Unknown Source)
at app.package.DocumentHandler_Subclass.lambda$process$1(Unknown Source)
at framework.package.InvocationContext.proceed(InvocationContext.java:73)
at framework.package.InvocationContext.proceed(InvocationContext.java:62)
at framework.package.TransactionManager.invokeInTransaction(TransactionManager.java:136)
at framework.package.TransactionManager.invokeInTransaction(TransactionManager.java:107)
at framework.package.TransactionalInterceptor.doIntercept(TransactionalInterceptor.java:38)
at framework.package.TransactionManager.intercept(TransactionManager.java:61)
at framework.package.TransactionalInterceptor.intercept(TransactionalInterceptor.java:32)
at framework.package.TransactionBeanInterceptor.intercept(Unknown Source)
at framework.package.InvocationHandler.invoke(InvocationHandler.java:42)
at framework.package.InvocationContext.perform(InvocationContext.java:30)
at framework.package.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
at app.package.DocumentHandler_Subclass.upload(Unknown Source)
at app.package.DocumentHandler_ClientProxy.upload(Unknown Source)
at app.package.MessageListener.onMessage(MessageListener.java:31)
at app.package.MessageListener_ClientProxy.onMessage(Unknown Source)
at messaging.package.JmsMessageConsumer.callMessageListener(JmsMessageConsumer.java:1225)
at messaging.package.AsyncMessageHandler.callMessageListener(AsyncMessageHandler.java:782)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post