]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Fix for plan reloader when the namespace doesn't match.
authorJeremias Maerki <jeremias@apache.org>
Tue, 5 Aug 2008 15:20:54 +0000 (15:20 +0000)
committerJeremias Maerki <jeremias@apache.org>
Tue, 5 Aug 2008 15:20:54 +0000 (15:20 +0000)
Added a viewBox attribute to the generated SVG so scaling is done properly when embedded in another SVG file.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AreaTreeNewDesign@682748 13f79535-47bb-0310-9956-ffa450edef68

examples/plan/src/org/apache/fop/plan/PreloaderPlan.java
examples/plan/src/org/apache/fop/plan/SimplePlanDrawer.java

index b8a7a612cce52d19cc2fe1a05c4db9664fd0f51a..902560e9683aea349a0cd8d4b61a26fcaff89115 100644 (file)
@@ -66,7 +66,7 @@ public class PreloaderPlan extends AbstractImagePreloader {
         return info;
     }
 
-    private ImageInfo getImage(String uri, Source src, ImageContext context) {
+    private ImageInfo getImage(String uri, Source src, ImageContext context) throws IOException {
 
         InputStream in = new UnclosableInputStream(ImageUtil.needInputStream(src));
         try {
@@ -76,9 +76,16 @@ public class PreloaderPlan extends AbstractImagePreloader {
             DOMResult res = new DOMResult();
             transformer.transform(source, res);
 
+            Document planDoc = (Document)res.getNode();
+            if (!PlanElementMapping.NAMESPACE.equals(
+                    planDoc.getDocumentElement().getNamespaceURI())) {
+                in.reset();
+                return null;
+            }
+
             //Have to render the plan to know its size
             PlanRenderer pr = new PlanRenderer();
-            Document svgDoc = pr.createSVGDocument((Document)res.getNode());
+            Document svgDoc = pr.createSVGDocument(planDoc);
             float width = pr.getWidth();
             float height = pr.getHeight();
 
index b49256a319499ceb84b1320d9da23816824a1989..46b07601abcb9efce1e06cf9aaf53dbbddf6768e 100644 (file)
@@ -29,6 +29,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import org.apache.batik.dom.svg.SVGDOMImplementation;
+
 import org.apache.fop.svg.SVGUtilities;
 
 /**
@@ -83,13 +84,15 @@ public class SimplePlanDrawer implements PlanDrawer {
 
         String title = "";
 
-        DOMImplementation impl =
-            SVGDOMImplementation.getDOMImplementation();
+        DOMImplementation impl
+            SVGDOMImplementation.getDOMImplementation();
         Document doc = impl.createDocument(SVG_NAMESPACE, "svg", null);
 
         Element svgRoot = doc.getDocumentElement();
-        svgRoot.setAttributeNS(null, "width", "" + width);
-        svgRoot.setAttributeNS(null, "height", "" + height);
+        svgRoot.setAttributeNS(null, "width", Float.toString(width));
+        svgRoot.setAttributeNS(null, "height", Float.toString(height));
+        svgRoot.setAttributeNS(null, "viewBox",
+                "0 0 " + Float.toString(width) + " " + Float.toString(height));
         svgRoot.setAttributeNS(null, "style",
                                "font-size:" + 8
                                    + ";font-family:"
@@ -99,8 +102,8 @@ public class SimplePlanDrawer implements PlanDrawer {
                                   java.awt.Font.PLAIN, (int)fontSize);
 
         if (bord) {
-            Element border =
-                SVGUtilities.createRect(doc, 0, 0, width, height);
+            Element border
+                SVGUtilities.createRect(doc, 0, 0, width, height);
             border.setAttributeNS(null, "style", "stroke:black;fill:none");
             svgRoot.appendChild(border);
         }