Author: ssteiner
Date: Mon Aug 10 12:13:36 2015
New Revision: 1695041

URL: http://svn.apache.org/r1695041
Log:
FOP-2473: SVG text using filters not shown

Modified:
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
    
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageHandlerSVG.java
    
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/ps/ImageHandlingTestCase.java

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java?rev=1695041&r1=1695040&r2=1695041&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
 (original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/pdf/PDFImageHandlerSVG.java
 Mon Aug 10 12:13:36 2015
@@ -49,6 +49,7 @@ import org.apache.fop.render.ImageHandle
 import org.apache.fop.render.ImageHandlerUtil;
 import org.apache.fop.render.RenderingContext;
 import org.apache.fop.render.pdf.PDFLogicalStructureHandler.MarkedContentInfo;
+import org.apache.fop.render.ps.PSImageHandlerSVG;
 import org.apache.fop.svg.PDFAElementBridge;
 import org.apache.fop.svg.PDFBridgeContext;
 import org.apache.fop.svg.PDFGraphics2D;
@@ -85,7 +86,7 @@ public class PDFImageHandlerSVG implemen
         GVTBuilder builder = new GVTBuilder();
 
         //Controls whether text painted by Batik is generated using text or 
path operations
-        boolean strokeText = false;
+        boolean strokeText = 
PSImageHandlerSVG.shouldStrokeText(imageSVG.getDocument().getChildNodes());
         //TODO connect with configuration elsewhere.
 
         BridgeContext ctx = new PDFBridgeContext(ua,

Modified: 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageHandlerSVG.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageHandlerSVG.java?rev=1695041&r1=1695040&r2=1695041&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageHandlerSVG.java 
(original)
+++ 
xmlgraphics/fop/trunk/src/java/org/apache/fop/render/ps/PSImageHandlerSVG.java 
Mon Aug 10 12:13:36 2015
@@ -103,7 +103,7 @@ public class PSImageHandlerSVG implement
             PSImageUtils.writeImage(encoder, imgDim, imgDescription, 
targetRect, cm, gen, ri, mi.getMaskColor());
         } else {
             //Controls whether text painted by Batik is generated using text 
or path operations
-            boolean strokeText = false;
+            boolean strokeText = 
shouldStrokeText(imageSVG.getDocument().getChildNodes());
             //TODO Configure text stroking
 
             SVGUserAgent ua = new SVGUserAgent(context.getUserAgent(),
@@ -327,6 +327,19 @@ public class PSImageHandlerSVG implement
         return opacityFound;
     }
 
+    public static boolean shouldStrokeText(NodeList childNodes) {
+        for (int i = 0; i < childNodes.getLength(); i++) {
+            Node curNode = childNodes.item(i);
+            if (shouldStrokeText(curNode.getChildNodes())) {
+                return true;
+            }
+            if ("text".equals(curNode.getLocalName())) {
+                return curNode.getAttributes().getNamedItem("filter") != null;
+            }
+        }
+        return false;
+    }
+
     /** {@inheritDoc} */
     public int getPriority() {
         return 400;

Modified: 
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/ps/ImageHandlingTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/render/ps/ImageHandlingTestCase.java?rev=1695041&r1=1695040&r2=1695041&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/ps/ImageHandlingTestCase.java
 (original)
+++ 
xmlgraphics/fop/trunk/test/java/org/apache/fop/render/ps/ImageHandlingTestCase.java
 Mon Aug 10 12:13:36 2015
@@ -18,18 +18,27 @@
 /* $Id$ */
 
 package org.apache.fop.render.ps;
+
+import java.awt.Rectangle;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 
 import org.junit.Test;
 
+import org.w3c.dom.Document;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import org.apache.commons.io.IOUtils;
 
+import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
+
+import org.apache.xmlgraphics.image.loader.impl.ImageXMLDOM;
 import org.apache.xmlgraphics.ps.DSCConstants;
+import org.apache.xmlgraphics.ps.PSGenerator;
 import org.apache.xmlgraphics.ps.PSResource;
 import org.apache.xmlgraphics.ps.dsc.DSCException;
 import org.apache.xmlgraphics.ps.dsc.DSCParser;
@@ -39,6 +48,8 @@ import org.apache.xmlgraphics.ps.dsc.eve
 import org.apache.xmlgraphics.ps.dsc.events.DSCEvent;
 
 import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.fonts.FontInfo;
 import org.apache.fop.render.intermediate.IFContext;
 
 /**
@@ -159,4 +170,26 @@ public class ImageHandlingTestCase exten
         return sb.toString();
     }
 
+    @Test
+    public void testPSImageHandlerSVG() throws IOException {
+        FOUserAgent ua = FopFactory.newInstance(new 
File(".").toURI()).newFOUserAgent();
+        String svg = "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"; 
xmlns=\"http://www.w3.org/2000/svg\"; "
+                + "width=\"210mm\" height=\"297mm\" font-size=\"20\" 
stroke-width=\"0.1mm\" font-family=\"Arial\">\n"
+                + "  <filter id=\"drop-shadow-font\" width=\"150%\" 
height=\"150%\">\n"
+                + "    <feGaussianBlur in=\"SourceAlpha\" result=\"blur\" 
stdDeviation=\"1\"/>\n"
+                + "    <feOffset in=\"blur\" result=\"offsetBlur\" dy=\"1\" 
dx=\"1\"/>\n"
+                + "    <feBlend in=\"SourceGraphic\" in2=\"offsetBlur\" 
mode=\"normal\"/>\n"
+                + "  </filter>\n"
+                + "  <text x=\"4.9mm\" filter=\"url(#drop-shadow-font)\" 
y=\"10.5mm\" fill=\"black\" "
+                + "rotate=\"30 30 0 15\">Hello SVG with FOP</text>\n"
+                + "</svg>";
+        SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(null);
+        Document doc = factory.createDocument(null, 
IOUtils.toInputStream(svg));
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        new PSImageHandlerSVG().handleImage(
+                new PSRenderingContext(ua, new PSGenerator(bos), new 
FontInfo()),
+                new ImageXMLDOM(null, doc, ""),
+                new Rectangle());
+        assertTrue(bos.toString().contains("/DataSource Data"));
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to