Author: tilman
Date: Wed Apr  8 08:00:46 2026
New Revision: 1932896

Log:
PDFBOX-5660: dispose graphics even if exception is thrown, as suggested by 
Valery Bokov; closes #434

Modified:
   
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java  
    Wed Apr  8 08:00:43 2026        (r1932895)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java  
    Wed Apr  8 08:00:46 2026        (r1932896)
@@ -326,28 +326,33 @@ public class PDFRenderer
 
         // use a transparent background if the image type supports alpha
         Graphics2D g = image.createGraphics();
-        if (image.getType() == BufferedImage.TYPE_INT_ARGB)
+        try
         {
-            g.setBackground(new Color(0, 0, 0, 0));
+            if (image.getType() == BufferedImage.TYPE_INT_ARGB)
+            {
+                g.setBackground(new Color(0, 0, 0, 0));
+            }
+            else
+            {
+                g.setBackground(Color.WHITE);
+            }
+            g.clearRect(0, 0, image.getWidth(), image.getHeight());
+
+            transform(g, page.getRotation(), cropBox, scale, scale);
+
+            // the end-user may provide a custom PageDrawer
+            RenderingHints actualRenderingHints
+                    = renderingHints == null ? createDefaultRenderingHints(g) 
: renderingHints;
+            PageDrawerParameters parameters
+                    = new PageDrawerParameters(this, page, subsamplingAllowed, 
destination,
+                            actualRenderingHints, 
imageDownscalingOptimizationThreshold);
+            PageDrawer drawer = createPageDrawer(parameters);
+            drawer.drawPage(g, cropBox);
         }
-        else
+        finally
         {
-            g.setBackground(Color.WHITE);
+            g.dispose();
         }
-        g.clearRect(0, 0, image.getWidth(), image.getHeight());
-        
-        transform(g, page.getRotation(), cropBox, scale, scale);
-
-        // the end-user may provide a custom PageDrawer
-        RenderingHints actualRenderingHints =
-                renderingHints == null ? createDefaultRenderingHints(g) : 
renderingHints;
-        PageDrawerParameters parameters =
-                new PageDrawerParameters(this, page, subsamplingAllowed, 
destination,
-                        actualRenderingHints, 
imageDownscalingOptimizationThreshold);
-        PageDrawer drawer = createPageDrawer(parameters);
-        drawer.drawPage(g, cropBox);
-        
-        g.dispose();
 
         if (image.getType() != imageType.toBufferedImageType())
         {

Reply via email to