PDFBOX-5660: dispose graphics even if exception is thrown, as suggested by Valery Bokov; closes #434 git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1932896 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java index 589c62a..e3e766c 100644 --- a/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java +++ b/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
@@ -326,28 +326,33 @@ // 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)); - } - else - { - g.setBackground(Color.WHITE); - } - g.clearRect(0, 0, image.getWidth(), image.getHeight()); - - transform(g, page.getRotation(), cropBox, scale, scale); + 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()); - // 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(); + 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); + } + finally + { + g.dispose(); + } if (image.getType() != imageType.toBufferedImageType()) {