From d8e07e5b8b00bd32ac7136757098357b909d64e4 Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Thu, 9 Jun 2005 12:50:14 +0000 Subject: [PATCH] Avoid NPEs when no filename is set on the UserAgent. Only the first page is rendered in this case. The resolution is written to the PNG file. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198730 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/fop/render/bitmap/PNGRenderer.java | 61 +++++++++++++------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/src/java/org/apache/fop/render/bitmap/PNGRenderer.java b/src/java/org/apache/fop/render/bitmap/PNGRenderer.java index 1e2820886..28824e9ea 100644 --- a/src/java/org/apache/fop/render/bitmap/PNGRenderer.java +++ b/src/java/org/apache/fop/render/bitmap/PNGRenderer.java @@ -25,7 +25,7 @@ public class PNGRenderer extends Java2DRenderer { public static final String MIME_TYPE = "image/png"; /** The file syntax prefix, eg. "page" will output "page1.png" etc */ - private String fileSyntax; + private String filePrefix; /** The output directory where images are to be written */ private File outputDir; @@ -60,16 +60,22 @@ public class PNGRenderer extends Java2DRenderer { // the file provided on the command line File f = getUserAgent().getOutputFile(); - - outputDir = f.getParentFile(); - - // extracting file name syntax - String s = f.getName(); - int i = s.lastIndexOf("."); - if (s.charAt(i - 1) == '1') { - i--; // getting rid of the "1" + if (f == null) { + //No filename information available. Only the first page will be rendered. + outputDir = null; + filePrefix = null; + } else { + outputDir = f.getParentFile(); + + // extracting file name syntax + String s = f.getName(); + int i = s.lastIndexOf("."); + if (s.charAt(i - 1) == '1') { + i--; // getting rid of the "1" + } + filePrefix = s.substring(0, i); } - fileSyntax = s.substring(0, i); + } public void stopRenderer() throws IOException { @@ -78,14 +84,27 @@ public class PNGRenderer extends Java2DRenderer { for (int i = 0; i < pageViewportList.size(); i++) { + OutputStream os = getCurrentOutputStream(i); + if (os == null) { + getLogger().warn("No filename information available." + + " 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 - getLogger().debug("Encoding Page " + (i + 1)); + getLogger().debug("Encoding page " + (i + 1)); renderParams = PNGEncodeParam.getDefaultEncodeParam(image); - OutputStream os = getCurrentOutputStream(i); + + // 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(); @@ -103,14 +122,18 @@ public class PNGRenderer extends Java2DRenderer { return firstOutputStream; } - File f = new File(outputDir + File.separator + fileSyntax - + (pageNumber + 1) + ".png"); - try { - OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); - return os; - } catch (FileNotFoundException e) { - new FOPException("Can't build the OutputStream\n" + e); + if (filePrefix == null) { return null; + } else { + File f = new File(outputDir + File.separator + filePrefix + + (pageNumber + 1) + ".png"); + try { + OutputStream os = new BufferedOutputStream(new FileOutputStream(f)); + return os; + } catch (FileNotFoundException e) { + new FOPException("Can't build the OutputStream\n" + e); + return null; + } } } } -- 2.39.5