xmlgraphics-fop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Caprioara (JIRA)" <j...@apache.org>
Subject [jira] [Created] (FOP-2872) NullPointerException when an SVG root element specifies the size in 'em' (and a fix for this)
Date Wed, 03 Jul 2019 09:24:00 GMT
Dan Caprioara created FOP-2872:
----------------------------------

             Summary: NullPointerException when an SVG root element specifies the size in
'em' (and a fix for this)
                 Key: FOP-2872
                 URL: https://issues.apache.org/jira/browse/FOP-2872
             Project: FOP
          Issue Type: Bug
          Components: foreign/svg
    Affects Versions: 2.3
            Reporter: Dan Caprioara


This is the sample FO file, the SVG has its height specified in 'em' dimension:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<fo:root
	xmlns:fo="http://www.w3.org/1999/XSL/Format"
	xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">
	<fo:layout-master-set>
		<fo:simple-page-master master-name="sample">
			<fo:region-body/>
		</fo:simple-page-master>
	</fo:layout-master-set>
	<fo:page-sequence master-reference="sample">
		<fo:flow flow-name="xsl-region-body">			
				<fo:block
					font-size="large"
					font-style="italic">Testing SVG images, there should be no NPE</fo:block>
				<fo:block>
					<fo:block> This is a SVG with its size in em: <fo:instream-foreign-object><svg
						class="hazardsymbol"
						height="5em"
						version="1.1"
						viewBox="0 0 600 600"
						xmlns="http://www.w3.org/2000/svg"><rect
							fill="red"
							height="600"
							rx="10"
							ry="10"
							stroke="black"
							stroke-width="5"
							width="600"
							x="0"
							y="0"/></svg></fo:instream-foreign-object>
					</fo:block>
				</fo:block>
		</fo:flow>
	</fo:page-sequence>
</fo:root>
{code}
The exception is:
{code:java}
ava.lang.NullPointerException
	at org.apache.batik.bridge.UnitProcessor$DefaultContext.getFontSize(UnitProcessor.java:384)
	at org.apache.batik.parser.UnitProcessor.emsToPixels(UnitProcessor.java:286)
	at org.apache.batik.parser.UnitProcessor.svgToUserSpace(UnitProcessor.java:171)
	at org.apache.batik.parser.UnitProcessor.svgToUserSpace(UnitProcessor.java:140)
	at org.apache.batik.bridge.UnitProcessor.svgToUserSpace(UnitProcessor.java:310)
	at org.apache.batik.bridge.UnitProcessor.svgLengthToUserSpace(UnitProcessor.java:286)
	at org.apache.batik.bridge.UnitProcessor.svgVerticalLengthToUserSpace(UnitProcessor.java:217)
	at org.apache.fop.image.loader.batik.PreloaderSVG$Loader.createImageInfo(PreloaderSVG.java:191)
	at org.apache.fop.image.loader.batik.PreloaderSVG$Loader.getImage(PreloaderSVG.java:131)
	at org.apache.fop.image.loader.batik.PreloaderSVG$Loader.access$200(PreloaderSVG.java:108)
	at org.apache.fop.image.loader.batik.PreloaderSVG.preloadImage(PreloaderSVG.java:76)
	at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageManager.java:176)
	
{code}
The cause is the document misses a CSSEngine, the SVG preloader does not provide one.
 The solution is to have the preloader initialize the document using the bridge context:
{code:java}
Index: src/main/java/org/apache/batik/bridge/BridgeContext.java
===================================================================
--- src/main/java/org/apache/batik/bridge/BridgeContext.java	(revision 189449)
+++ src/main/java/org/apache/batik/bridge/BridgeContext.java	(working copy)
@@ -372,7 +372,7 @@
     /**
      * Initializes the given document.
      */
-    protected void initializeDocument(Document document) {
+    public void initializeDocument(Document document) {
         SVGOMDocument doc = (SVGOMDocument)document;
         CSSEngine eng = doc.getCSSEngine();
         if (eng == null) {
Index: src/main/java/org/apache/fop/image/loader/batik/PreloaderSVG.java
===================================================================
--- src/main/java/org/apache/fop/image/loader/batik/PreloaderSVG.java	(revision 189449)
+++ src/main/java/org/apache/fop/image/loader/batik/PreloaderSVG.java	(working copy)
@@ -172,6 +172,7 @@
 
             };
             BridgeContext ctx = new BridgeContext(userAg);
+            ctx.initializeDocument(doc);
             UnitProcessor.Context uctx = UnitProcessor.createContext(ctx, e);
 
             String s;

{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message