]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Rename PSXMLHandler to what it really is: an SVGHandler.
authorJeremias Maerki <jeremias@apache.org>
Sun, 21 Aug 2005 14:17:06 +0000 (14:17 +0000)
committerJeremias Maerki <jeremias@apache.org>
Sun, 21 Aug 2005 14:17:06 +0000 (14:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@234206 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/ps/PSRenderer.java
src/java/org/apache/fop/render/ps/PSSVGHandler.java [new file with mode: 0644]
src/java/org/apache/fop/render/ps/PSXMLHandler.java [deleted file]

index 7413f77176744d846e8a3dcd684dadfe43e36d79..ef684b58203d6f0cd42aa6fd1e1d87072dd31dca 100644 (file)
@@ -111,7 +111,7 @@ public class PSRenderer extends AbstractPathOrientedRenderer {
      */
     public void setUserAgent(FOUserAgent agent) {
         super.setUserAgent(agent);
-        PSXMLHandler xmlHandler = new PSXMLHandler();
+        PSSVGHandler xmlHandler = new PSSVGHandler();
         userAgent.getXMLHandlerRegistry().addXMLHandler(xmlHandler);
     }
 
@@ -853,15 +853,15 @@ public class PSRenderer extends AbstractPathOrientedRenderer {
         context = new RendererContext(this, MIME_TYPE);
         context.setUserAgent(userAgent);
 
-        context.setProperty(PSXMLHandler.PS_GENERATOR, this.gen);
-        context.setProperty(PSXMLHandler.PS_FONT_INFO, fontInfo);
-        context.setProperty(PSXMLHandler.PS_WIDTH,
+        context.setProperty(PSSVGHandler.PS_GENERATOR, this.gen);
+        context.setProperty(PSSVGHandler.PS_FONT_INFO, fontInfo);
+        context.setProperty(PSSVGHandler.PS_WIDTH,
                             new Integer((int) pos.getWidth()));
-        context.setProperty(PSXMLHandler.PS_HEIGHT,
+        context.setProperty(PSSVGHandler.PS_HEIGHT,
                             new Integer((int) pos.getHeight()));
-        context.setProperty(PSXMLHandler.PS_XPOS,
+        context.setProperty(PSSVGHandler.PS_XPOS,
                             new Integer(currentIPPosition + (int) pos.getX()));
-        context.setProperty(PSXMLHandler.PS_YPOS,
+        context.setProperty(PSSVGHandler.PS_YPOS,
                             new Integer(currentBPPosition + (int) pos.getY()));
         //context.setProperty("strokeSVGText", options.get("strokeSVGText"));
         
diff --git a/src/java/org/apache/fop/render/ps/PSSVGHandler.java b/src/java/org/apache/fop/render/ps/PSSVGHandler.java
new file mode 100644 (file)
index 0000000..27c9de0
--- /dev/null
@@ -0,0 +1,368 @@
+/*
+ * Copyright 1999-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.ps;
+
+// Java
+import java.awt.geom.AffineTransform;
+import java.io.IOException;
+
+// DOM
+/* org.w3c.dom.Document is not imported to avoid conflict with
+   org.apache.fop.control.Document */
+import org.w3c.dom.svg.SVGDocument;
+import org.w3c.dom.svg.SVGSVGElement;
+
+// Batik
+import org.apache.batik.bridge.GVTBuilder;
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.bridge.ViewBox;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.gvt.GraphicsNode;
+
+// FOP
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.render.XMLHandler;
+import org.apache.fop.render.RendererContext;
+import org.apache.fop.svg.SVGUserAgent;
+
+// Commons-Logging
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * PostScript XML handler for SVG. Uses Apache Batik for SVG processing.
+ * This handler handles XML for foreign objects when rendering to PostScript.
+ * It renders SVG to the PostScript document using the PSGraphics2D.
+ * The properties from the PostScript renderer are subject to change.
+ *
+ * @author <a href="mailto:fop-dev@xml.apache.org">Apache XML FOP Development Team</a>
+ * @version $Id$
+ */
+public class PSSVGHandler implements XMLHandler {
+
+    /**
+     * logging instance
+     */
+    private Log log = LogFactory.getLog(PSSVGHandler.class);
+
+    /**
+     * The PostScript generator that is being used to drawn into.
+     */
+    public static final String PS_GENERATOR = "psGenerator";
+
+    /**
+     * The font information for the PostScript renderer.
+     */
+    public static final String PS_FONT_INFO = "psFontInfo";
+
+    /**
+     * The width of the SVG graphic.
+     */
+    public static final String PS_WIDTH = "width";
+
+    /**
+     * The height of the SVG graphic.
+     */
+    public static final String PS_HEIGHT = "height";
+
+    /**
+     * The x position that this is being drawn at.
+     */
+    public static final String PS_XPOS = "xpos";
+
+    /**
+     * The y position that this is being drawn at.
+     */
+    public static final String PS_YPOS = "ypos";
+
+    /**
+     * Create a new PostScript XML handler for use by the PostScript renderer.
+     */
+    public PSSVGHandler() {
+    }
+
+    /** @see org.apache.fop.render.XMLHandler */
+    public void handleXML(RendererContext context, 
+                org.w3c.dom.Document doc, String ns) throws Exception {
+        PSInfo psi = getPSInfo(context);
+
+        if (SVGDOMImplementation.SVG_NAMESPACE_URI.equals(ns)) {
+            SVGHandler svghandler = new SVGHandler();
+            svghandler.renderSVGDocument(context, doc, psi);
+        } else {
+            //nop
+        }
+    }
+
+    /**
+     * Get the pdf information from the render context.
+     *
+     * @param context the renderer context
+     * @return the pdf information retrieved from the context
+     */
+    public static PSInfo getPSInfo(RendererContext context) {
+        PSInfo psi = new PSInfo();
+        psi.psGenerator = (PSGenerator)context.getProperty(PS_GENERATOR);
+        psi.fontInfo = (org.apache.fop.fonts.FontInfo) context.getProperty(PS_FONT_INFO);
+        psi.width = ((Integer)context.getProperty(PS_WIDTH)).intValue();
+        psi.height = ((Integer)context.getProperty(PS_HEIGHT)).intValue();
+        psi.currentXPosition = ((Integer)context.getProperty(PS_XPOS)).intValue();
+        psi.currentYPosition = ((Integer)context.getProperty(PS_YPOS)).intValue();
+        return psi;
+    }
+
+    /**
+     * PostScript information structure for drawing the XML document.
+     */
+    public static class PSInfo {
+
+        /** see PS_GENERATOR */
+        private PSGenerator psGenerator;
+        /** see PS_FONT_INFO */
+        private org.apache.fop.fonts.FontInfo fontInfo;
+        /** see PS_PAGE_WIDTH */
+        private int width;
+        /** see PS_PAGE_HEIGHT */
+        private int height;
+        /** see PS_XPOS */
+        private int currentXPosition;
+        /** see PS_YPOS */
+        private int currentYPosition;
+        /**
+         * Returns the PSGenerator.
+         * @return PSGenerator
+         */
+        public PSGenerator getPSGenerator() {
+            return psGenerator;
+        }
+
+        /**
+         * Sets the PSGenerator.
+         * @param psGenerator The PSGenerator to set
+         */
+        public void setPsGenerator(PSGenerator psGenerator) {
+            this.psGenerator = psGenerator;
+        }
+
+        /**
+         * Returns the fontInfo.
+         * @return FontInfo
+         */
+        public FontInfo getFontInfo() {
+            return fontInfo;
+        }
+
+        /**
+         * Sets the fontInfo.
+         * @param fontInfo The fontInfo to set
+         */
+        public void setFontInfo(FontInfo fontInfo) {
+            this.fontInfo = fontInfo;
+        }
+
+        /**
+         * Returns the currentXPosition.
+         * @return int
+         */
+        public int getCurrentXPosition() {
+            return currentXPosition;
+        }
+
+        /**
+         * Sets the currentXPosition.
+         * @param currentXPosition The currentXPosition to set
+         */
+        public void setCurrentXPosition(int currentXPosition) {
+            this.currentXPosition = currentXPosition;
+        }
+
+        /**
+         * Returns the currentYPosition.
+         * @return int
+         */
+        public int getCurrentYPosition() {
+            return currentYPosition;
+        }
+
+        /**
+         * Sets the currentYPosition.
+         * @param currentYPosition The currentYPosition to set
+         */
+        public void setCurrentYPosition(int currentYPosition) {
+            this.currentYPosition = currentYPosition;
+        }
+
+        /**
+         * Returns the width.
+         * @return int
+         */
+        public int getWidth() {
+            return width;
+        }
+
+        /**
+         * Sets the width.
+         * @param width The pageWidth to set
+         */
+        public void setWidth(int width) {
+            this.width = width;
+        }
+
+        /**
+         * Returns the height.
+         * @return int
+         */
+        public int getHeight() {
+            return height;
+        }
+
+        /**
+         * Sets the height.
+         * @param height The height to set
+         */
+        public void setHeight(int height) {
+            this.height = height;
+        }
+
+    }
+
+    /**
+     * This method is placed in an inner class so that we don't get class
+     * loading errors if batik is not present.
+     */
+    protected class SVGHandler {
+        /**
+         * Render the svg document.
+         * @param context the renderer context
+         * @param doc the svg document
+         * @param psInfo the pdf information of the current context
+         */
+        protected void renderSVGDocument(RendererContext context,
+                org.w3c.dom.Document doc, PSInfo psInfo) {
+            int xOffset = psInfo.currentXPosition;
+            int yOffset = psInfo.currentYPosition;
+            PSGenerator gen = psInfo.psGenerator;
+
+            SVGUserAgent ua
+                 = new SVGUserAgent(
+                    context.getUserAgent().getPixelUnitToMillimeter(),
+                    new AffineTransform());
+
+            GVTBuilder builder = new GVTBuilder();
+            BridgeContext ctx = new BridgeContext(ua);
+            PSTextPainter textPainter = new PSTextPainter(psInfo.getFontInfo());
+            ctx.setTextPainter(textPainter);            
+            PSTextElementBridge tBridge = new PSTextElementBridge(textPainter);
+            ctx.putBridge(tBridge);
+
+            //PSAElementBridge aBridge = new PSAElementBridge();
+            // to get the correct transform we need to use the PDFState
+            AffineTransform transform = gen.getCurrentState().getTransform();
+            transform.translate(xOffset / 1000f, yOffset / 1000f);
+            //aBridge.setCurrentTransform(transform);
+            //ctx.putBridge(aBridge);
+
+            GraphicsNode root;
+            try {
+                root = builder.build(ctx, doc);
+            } catch (Exception e) {
+                log.error("SVG graphic could not be built: "
+                                       + e.getMessage(), e);
+                return;
+            }
+            // get the 'width' and 'height' attributes of the SVG document
+            float w = (float)ctx.getDocumentSize().getWidth() * 1000f;
+            float h = (float)ctx.getDocumentSize().getHeight() * 1000f;
+
+            float sx = psInfo.getWidth() / (float)w;
+            float sy = psInfo.getHeight() / (float)h;
+
+            ctx = null;
+            builder = null;
+
+            try {
+                gen.commentln("%FOPBeginSVG");
+                gen.saveGraphicsState();
+                /*
+                 * Clip to the svg area.
+                 * Note: To have the svg overlay (under) a text area then use
+                 * an fo:block-container
+                 */
+                gen.writeln("newpath");
+                gen.defineRect(xOffset / 1000f, yOffset / 1000f, 
+                        psInfo.getWidth() / 1000f, psInfo.getWidth() / 1000f);
+                gen.writeln("clip");
+                
+                // transform so that the coordinates (0,0) is from the top left
+                // and positive is down and to the right. (0,0) is where the
+                // viewBox puts it.
+                gen.concatMatrix(sx, 0, 0, sy, xOffset / 1000f, yOffset / 1000f);
+
+                SVGSVGElement svg = ((SVGDocument)doc).getRootElement();
+                AffineTransform at = ViewBox.getPreserveAspectRatioTransform(svg,
+                        psInfo.getWidth() / 1000f, psInfo.getHeight() / 1000f);
+                if (false && !at.isIdentity()) {
+                    double[] vals = new double[6];
+                    at.getMatrix(vals);
+                    gen.concatMatrix(vals);
+                }
+
+                /*
+                if (psInfo.pdfContext == null) {
+                    psInfo.pdfContext = psInfo.pdfPage;
+                }*/
+                final boolean textAsShapes = false;
+                PSGraphics2D graphics = new PSGraphics2D(textAsShapes, gen);
+                graphics.setGraphicContext(new org.apache.batik.ext.awt.g2d.GraphicContext());
+                //psInfo.pdfState.push();
+                transform = new AffineTransform();
+                // scale to viewbox
+                transform.translate(xOffset, yOffset);
+                gen.getCurrentState().concatMatrix(transform);
+                //graphics.setPDFState(psInfo.pdfState);
+                try {
+                    root.paint(graphics);
+                    //psInfo.currentStream.add(graphics.getString());
+                } catch (Exception e) {
+                    log.error("SVG graphic could not be rendered: "
+                                           + e.getMessage(), e);
+                }
+
+                psInfo.psGenerator.restoreGraphicsState();
+                //psInfo.pdfState.pop();
+                gen.commentln("%FOPEndSVG");
+            } catch (IOException ioe) {
+                log.error("SVG graphic could not be rendered: "
+                                       + ioe.getMessage(), ioe);
+            }
+        }
+    }
+
+    /** @see org.apache.fop.render.XMLHandler#getMimeType() */
+    public String getMimeType() {
+        return PSRenderer.MIME_TYPE;
+    }
+
+    /** @see org.apache.fop.render.XMLHandler#getNamespace() */
+    public String getNamespace() {
+        return SVGDOMImplementation.SVG_NAMESPACE_URI;
+    }
+    
+}
+
diff --git a/src/java/org/apache/fop/render/ps/PSXMLHandler.java b/src/java/org/apache/fop/render/ps/PSXMLHandler.java
deleted file mode 100644 (file)
index 8c1fa1b..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Copyright 1999-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.ps;
-
-// Java
-import java.awt.geom.AffineTransform;
-import java.io.IOException;
-
-// DOM
-/* org.w3c.dom.Document is not imported to avoid conflict with
-   org.apache.fop.control.Document */
-import org.w3c.dom.svg.SVGDocument;
-import org.w3c.dom.svg.SVGSVGElement;
-
-// Batik
-import org.apache.batik.bridge.GVTBuilder;
-import org.apache.batik.bridge.BridgeContext;
-import org.apache.batik.bridge.ViewBox;
-import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.batik.gvt.GraphicsNode;
-
-// FOP
-import org.apache.fop.fonts.FontInfo;
-import org.apache.fop.render.XMLHandler;
-import org.apache.fop.render.RendererContext;
-import org.apache.fop.svg.SVGUserAgent;
-
-// Commons-Logging
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * PostScript XML handler for SVG. Uses Apache Batik for SVG processing.
- * This handler handles XML for foreign objects when rendering to PostScript.
- * It renders SVG to the PostScript document using the PSGraphics2D.
- * The properties from the PostScript renderer are subject to change.
- *
- * @author <a href="mailto:fop-dev@xml.apache.org">Apache XML FOP Development Team</a>
- * @version $Id$
- */
-public class PSXMLHandler implements XMLHandler {
-
-    /**
-     * logging instance
-     */
-    private Log log = LogFactory.getLog(PSXMLHandler.class);
-
-    /**
-     * The PostScript generator that is being used to drawn into.
-     */
-    public static final String PS_GENERATOR = "psGenerator";
-
-    /**
-     * The font information for the PostScript renderer.
-     */
-    public static final String PS_FONT_INFO = "psFontInfo";
-
-    /**
-     * The width of the SVG graphic.
-     */
-    public static final String PS_WIDTH = "width";
-
-    /**
-     * The height of the SVG graphic.
-     */
-    public static final String PS_HEIGHT = "height";
-
-    /**
-     * The x position that this is being drawn at.
-     */
-    public static final String PS_XPOS = "xpos";
-
-    /**
-     * The y position that this is being drawn at.
-     */
-    public static final String PS_YPOS = "ypos";
-
-    /**
-     * Create a new PostScript XML handler for use by the PostScript renderer.
-     */
-    public PSXMLHandler() {
-    }
-
-    /** @see org.apache.fop.render.XMLHandler */
-    public void handleXML(RendererContext context, 
-                org.w3c.dom.Document doc, String ns) throws Exception {
-        PSInfo psi = getPSInfo(context);
-
-        if (SVGDOMImplementation.SVG_NAMESPACE_URI.equals(ns)) {
-            SVGHandler svghandler = new SVGHandler();
-            svghandler.renderSVGDocument(context, doc, psi);
-        } else {
-            //nop
-        }
-    }
-
-    /**
-     * Get the pdf information from the render context.
-     *
-     * @param context the renderer context
-     * @return the pdf information retrieved from the context
-     */
-    public static PSInfo getPSInfo(RendererContext context) {
-        PSInfo psi = new PSInfo();
-        psi.psGenerator = (PSGenerator)context.getProperty(PS_GENERATOR);
-        psi.fontInfo = (org.apache.fop.fonts.FontInfo) context.getProperty(PS_FONT_INFO);
-        psi.width = ((Integer)context.getProperty(PS_WIDTH)).intValue();
-        psi.height = ((Integer)context.getProperty(PS_HEIGHT)).intValue();
-        psi.currentXPosition = ((Integer)context.getProperty(PS_XPOS)).intValue();
-        psi.currentYPosition = ((Integer)context.getProperty(PS_YPOS)).intValue();
-        return psi;
-    }
-
-    /**
-     * PostScript information structure for drawing the XML document.
-     */
-    public static class PSInfo {
-
-        /** see PS_GENERATOR */
-        private PSGenerator psGenerator;
-        /** see PS_FONT_INFO */
-        private org.apache.fop.fonts.FontInfo fontInfo;
-        /** see PS_PAGE_WIDTH */
-        private int width;
-        /** see PS_PAGE_HEIGHT */
-        private int height;
-        /** see PS_XPOS */
-        private int currentXPosition;
-        /** see PS_YPOS */
-        private int currentYPosition;
-        /**
-         * Returns the PSGenerator.
-         * @return PSGenerator
-         */
-        public PSGenerator getPSGenerator() {
-            return psGenerator;
-        }
-
-        /**
-         * Sets the PSGenerator.
-         * @param psGenerator The PSGenerator to set
-         */
-        public void setPsGenerator(PSGenerator psGenerator) {
-            this.psGenerator = psGenerator;
-        }
-
-        /**
-         * Returns the fontInfo.
-         * @return FontInfo
-         */
-        public FontInfo getFontInfo() {
-            return fontInfo;
-        }
-
-        /**
-         * Sets the fontInfo.
-         * @param fontInfo The fontInfo to set
-         */
-        public void setFontInfo(FontInfo fontInfo) {
-            this.fontInfo = fontInfo;
-        }
-
-        /**
-         * Returns the currentXPosition.
-         * @return int
-         */
-        public int getCurrentXPosition() {
-            return currentXPosition;
-        }
-
-        /**
-         * Sets the currentXPosition.
-         * @param currentXPosition The currentXPosition to set
-         */
-        public void setCurrentXPosition(int currentXPosition) {
-            this.currentXPosition = currentXPosition;
-        }
-
-        /**
-         * Returns the currentYPosition.
-         * @return int
-         */
-        public int getCurrentYPosition() {
-            return currentYPosition;
-        }
-
-        /**
-         * Sets the currentYPosition.
-         * @param currentYPosition The currentYPosition to set
-         */
-        public void setCurrentYPosition(int currentYPosition) {
-            this.currentYPosition = currentYPosition;
-        }
-
-        /**
-         * Returns the width.
-         * @return int
-         */
-        public int getWidth() {
-            return width;
-        }
-
-        /**
-         * Sets the width.
-         * @param width The pageWidth to set
-         */
-        public void setWidth(int width) {
-            this.width = width;
-        }
-
-        /**
-         * Returns the height.
-         * @return int
-         */
-        public int getHeight() {
-            return height;
-        }
-
-        /**
-         * Sets the height.
-         * @param height The height to set
-         */
-        public void setHeight(int height) {
-            this.height = height;
-        }
-
-    }
-
-    /**
-     * This method is placed in an inner class so that we don't get class
-     * loading errors if batik is not present.
-     */
-    protected class SVGHandler {
-        /**
-         * Render the svg document.
-         * @param context the renderer context
-         * @param doc the svg document
-         * @param psInfo the pdf information of the current context
-         */
-        protected void renderSVGDocument(RendererContext context,
-                org.w3c.dom.Document doc, PSInfo psInfo) {
-            int xOffset = psInfo.currentXPosition;
-            int yOffset = psInfo.currentYPosition;
-            PSGenerator gen = psInfo.psGenerator;
-
-            SVGUserAgent ua
-                 = new SVGUserAgent(
-                    context.getUserAgent().getPixelUnitToMillimeter(),
-                    new AffineTransform());
-
-            GVTBuilder builder = new GVTBuilder();
-            BridgeContext ctx = new BridgeContext(ua);
-            PSTextPainter textPainter = new PSTextPainter(psInfo.getFontInfo());
-            ctx.setTextPainter(textPainter);            
-            PSTextElementBridge tBridge = new PSTextElementBridge(textPainter);
-            ctx.putBridge(tBridge);
-
-            //PSAElementBridge aBridge = new PSAElementBridge();
-            // to get the correct transform we need to use the PDFState
-            AffineTransform transform = gen.getCurrentState().getTransform();
-            transform.translate(xOffset / 1000f, yOffset / 1000f);
-            //aBridge.setCurrentTransform(transform);
-            //ctx.putBridge(aBridge);
-
-            GraphicsNode root;
-            try {
-                root = builder.build(ctx, doc);
-            } catch (Exception e) {
-                log.error("SVG graphic could not be built: "
-                                       + e.getMessage(), e);
-                return;
-            }
-            // get the 'width' and 'height' attributes of the SVG document
-            float w = (float)ctx.getDocumentSize().getWidth() * 1000f;
-            float h = (float)ctx.getDocumentSize().getHeight() * 1000f;
-
-            float sx = psInfo.getWidth() / (float)w;
-            float sy = psInfo.getHeight() / (float)h;
-
-            ctx = null;
-            builder = null;
-
-            try {
-                gen.commentln("%FOPBeginSVG");
-                gen.saveGraphicsState();
-                /*
-                 * Clip to the svg area.
-                 * Note: To have the svg overlay (under) a text area then use
-                 * an fo:block-container
-                 */
-                gen.writeln("newpath");
-                gen.defineRect(xOffset / 1000f, yOffset / 1000f, 
-                        psInfo.getWidth() / 1000f, psInfo.getWidth() / 1000f);
-                gen.writeln("clip");
-                
-                // transform so that the coordinates (0,0) is from the top left
-                // and positive is down and to the right. (0,0) is where the
-                // viewBox puts it.
-                gen.concatMatrix(sx, 0, 0, sy, xOffset / 1000f, yOffset / 1000f);
-
-                SVGSVGElement svg = ((SVGDocument)doc).getRootElement();
-                AffineTransform at = ViewBox.getPreserveAspectRatioTransform(svg,
-                        psInfo.getWidth() / 1000f, psInfo.getHeight() / 1000f);
-                if (false && !at.isIdentity()) {
-                    double[] vals = new double[6];
-                    at.getMatrix(vals);
-                    gen.concatMatrix(vals);
-                }
-
-                /*
-                if (psInfo.pdfContext == null) {
-                    psInfo.pdfContext = psInfo.pdfPage;
-                }*/
-                final boolean textAsShapes = false;
-                PSGraphics2D graphics = new PSGraphics2D(textAsShapes, gen);
-                graphics.setGraphicContext(new org.apache.batik.ext.awt.g2d.GraphicContext());
-                //psInfo.pdfState.push();
-                transform = new AffineTransform();
-                // scale to viewbox
-                transform.translate(xOffset, yOffset);
-                gen.getCurrentState().concatMatrix(transform);
-                //graphics.setPDFState(psInfo.pdfState);
-                try {
-                    root.paint(graphics);
-                    //psInfo.currentStream.add(graphics.getString());
-                } catch (Exception e) {
-                    log.error("SVG graphic could not be rendered: "
-                                           + e.getMessage(), e);
-                }
-
-                psInfo.psGenerator.restoreGraphicsState();
-                //psInfo.pdfState.pop();
-                gen.commentln("%FOPEndSVG");
-            } catch (IOException ioe) {
-                log.error("SVG graphic could not be rendered: "
-                                       + ioe.getMessage(), ioe);
-            }
-        }
-    }
-
-    /** @see org.apache.fop.render.XMLHandler#getMimeType() */
-    public String getMimeType() {
-        return PSRenderer.MIME_TYPE;
-    }
-
-    /** @see org.apache.fop.render.XMLHandler#getNamespace() */
-    public String getNamespace() {
-        return SVGDOMImplementation.SVG_NAMESPACE_URI;
-    }
-    
-}
-