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())
{