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]