]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugfix: OutputStreams created by the PNG Renderer were not properly closed.
authorJeremias Maerki <jeremias@apache.org>
Tue, 6 Dec 2005 20:35:15 +0000 (20:35 +0000)
committerJeremias Maerki <jeremias@apache.org>
Tue, 6 Dec 2005 20:35:15 +0000 (20:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@354537 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/bitmap/PNGRenderer.java
src/java/org/apache/fop/render/bitmap/PNGRenderer_onthefly.java
status.xml

index 143436d5d97b1ebd5dfe02a30a2e56c916de1745..22a545ed6b387bb692f8752b019d75367476fcbf 100644 (file)
@@ -1,3 +1,21 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
 package org.apache.fop.render.bitmap;
 
 import java.awt.image.RenderedImage;
@@ -10,6 +28,7 @@ import java.io.OutputStream;
 
 import org.apache.batik.ext.awt.image.codec.PNGEncodeParam;
 import org.apache.batik.ext.awt.image.codec.PNGImageEncoder;
+import org.apache.commons.io.IOUtils;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.apps.MimeConstants;
 import org.apache.fop.area.PageViewport;
@@ -42,9 +61,6 @@ public class PNGRenderer extends Java2DRenderer {
         return MIME_TYPE;
     }
 
-    /** default constructor */
-    public PNGRenderer() {}
-
     /** @see org.apache.fop.render.Renderer#startRenderer(java.io.OutputStream) */
     public void startRenderer(OutputStream outputStream) throws IOException {
         log.info("rendering areas to PNG");
@@ -79,6 +95,7 @@ public class PNGRenderer extends Java2DRenderer {
 
     }
 
+    /** @see org.apache.fop.render.Renderer#stopRenderer() */
     public void stopRenderer() throws IOException {
 
         super.stopRenderer();
@@ -91,24 +108,30 @@ public class PNGRenderer extends Java2DRenderer {
                         + " Stopping early after the first page.");
                 break;
             }
-            // Do the rendering: get the image for this page
-            RenderedImage image = (RenderedImage) getPageImage((PageViewport) pageViewportList
-                    .get(i));
-
-            // Encode this image
-            log.debug("Encoding page " + (i + 1));
-            renderParams = PNGEncodeParam.getDefaultEncodeParam(image);
-            
-            // Set resolution
-            float pixSzMM = userAgent.getPixelUnitToMillimeter();
-            // num Pixs in 1 Meter
-            int numPix = (int)((1000 / pixSzMM) + 0.5);
-            renderParams.setPhysicalDimension(numPix, numPix, 1); // 1 means 'pix/meter'
-            
-            // Encode PNG image
-            PNGImageEncoder encoder = new PNGImageEncoder(os, renderParams);
-            encoder.encode(image);
-            os.flush();
+            try {
+                // Do the rendering: get the image for this page
+                RenderedImage image = (RenderedImage) getPageImage((PageViewport) pageViewportList
+                        .get(i));
+    
+                // Encode this image
+                log.debug("Encoding page " + (i + 1));
+                renderParams = PNGEncodeParam.getDefaultEncodeParam(image);
+                
+                // Set resolution
+                float pixSzMM = userAgent.getPixelUnitToMillimeter();
+                // num Pixs in 1 Meter
+                int numPix = (int)((1000 / pixSzMM) + 0.5);
+                renderParams.setPhysicalDimension(numPix, numPix, 1); // 1 means 'pix/meter'
+                
+                // Encode PNG image
+                PNGImageEncoder encoder = new PNGImageEncoder(os, renderParams);
+                encoder.encode(image);
+            } finally {
+                //Only close self-created OutputStreams
+                if (os != firstOutputStream) {
+                    IOUtils.closeQuietly(os);
+                }
+            }
         }
     }
 
index ba38477bd2be81b679d6a3abb975df8457614a8a..3f7ed34abedbd5aa55cda5df6c43a24da8f6d803 100644 (file)
@@ -1,3 +1,21 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
 package org.apache.fop.render.bitmap;
 
 import java.awt.image.RenderedImage;
@@ -10,6 +28,7 @@ import java.io.OutputStream;
 
 import org.apache.batik.ext.awt.image.codec.PNGEncodeParam;
 import org.apache.batik.ext.awt.image.codec.PNGImageEncoder;
+import org.apache.commons.io.IOUtils;
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.area.PageViewport;
 import org.apache.fop.render.java2d.Java2DRenderer;
@@ -36,14 +55,12 @@ public class PNGRenderer_onthefly extends Java2DRenderer {
     /** The OutputStream for the first Image */
     private OutputStream firstOutputStream;
 
-    /** default constructor */
-    public PNGRenderer_onthefly() {}
-
     /** @see org.apache.fop.render.AbstractRenderer */
     public String getMimeType() {
         return MIME_TYPE;
     }
 
+    /** @see org.apache.fop.render.Renderer#supportsOutOfOrder() */
     public boolean supportsOutOfOrder() {
         return true;
     }
@@ -76,6 +93,7 @@ public class PNGRenderer_onthefly extends Java2DRenderer {
         fileSyntax = s.substring(0, i);
     }
 
+    /** @see org.apache.fop.render.Renderer#renderPage(org.apache.fop.area.PageViewport) */
     public void renderPage(PageViewport pageViewport) throws IOException,
             FOPException {
 
@@ -86,9 +104,17 @@ public class PNGRenderer_onthefly extends Java2DRenderer {
         log.debug("Encoding page" + (getCurrentPageNumber() + 1));
         renderParams = PNGEncodeParam.getDefaultEncodeParam(image);
         OutputStream os = getCurrentOutputStream(getCurrentPageNumber());
-        PNGImageEncoder encoder = new PNGImageEncoder(os, renderParams);
-        encoder.encode(image);
-        os.flush();
+        if (os != null) {
+            try {
+                PNGImageEncoder encoder = new PNGImageEncoder(os, renderParams);
+                encoder.encode(image);
+            } finally {
+                //Only close self-created OutputStreams
+                if (os != firstOutputStream) {
+                    IOUtils.closeQuietly(os);
+                }
+            }
+        }
 
         setCurrentPageNumber(getCurrentPageNumber() + 1);
     }
index 3a82a8bb77918a71af389daf6acecdf9909c4feb..f4b99d6abf26a74990182d7c9bfa5363c10bfeb3 100644 (file)
@@ -27,6 +27,9 @@
 
   <changes>
     <release version="FOP Trunk">
+      <action context="Code" dev="JM" type="fix">
+        Bugfix: Self-created OutputStreams in PNG Renderer were not properly closed.
+      </action>
       <action context="Code" dev="JM" type="update">
         The border-collapse property on fo:table is now forced to the value "separate" until the collapsing
         border has been implemented.