HERE IS THE SVG FILE:
import java.awt.Shape;
import java.io.File;
import java.io.IOException;
import org.apache.batik.bridge.*;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.ext.awt.geom.PathLength;
import org.apache.batik.gvt.GraphicsNode;
import org.apache.batik.gvt.ShapeNode;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.svg.*;
import org.w3c.dom.*;
public class RenderableSVG {
public static void main(String[] args) {
SVGDocument doc = null;
String rtFileName = "C:\\Users\\Craig\\Google
Drive\\eclipse-workspace2\\Find Length Of Shape By ID\\drawing.svg";
try {
String urlString = new
File(rtFileName).getAbsoluteFile().toURL().toString();
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
doc = (SVGDocument) f.createDocument(urlString);
} catch (IOException ex) {
System.out.println("SVG file could not opened");
}
UserAgent userAgent=new UserAgentAdapter();
DocumentLoader loader=new DocumentLoader(userAgent);
BridgeContext ctx=new BridgeContext(userAgent,loader);
System.out.println(ctx);
Element el = doc.getElementById("ABC");
System.out.println(el);
GraphicsNode gn = ctx.getGraphicsNode(el);
System.out.println(gn);
Shape shape = ((ShapeNode)gn).getShape();
PathLength pathLength = new PathLength(shape);
System.out.println(pathLength.lengthOfPath());
}
}
HERE IS THE SVG FILE:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
style="fill-opacity:1; color-rendering:auto; color-interpolation:auto;
stroke:black; text-rendering:auto; stroke-linecap:square;
stroke-miterlimit:10; stroke-opacity:1; shape-rendering:auto; fill:black;
stroke-dasharray:none; font-weight:normal; stroke-width:1;
font-family:'Dialog'; font-style:normal; stroke-linejoin:miter;
font-size:12; stroke-dashoffset:0; image-rendering:auto;"
width="200"
height="200"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="drawing.svg">
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="640"
inkscape:window-height="480"
id="namedview11"
showgrid="false"
inkscape:zoom="1.18"
inkscape:cx="100"
inkscape:cy="100"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<!--Generated by the Batik Graphics2D SVG Generator-->
<defs
id="genericDefs" />
<g
id="g5">
<g
id="g7">
<rect
x="0"
width="100"
height="100"
y="0"
style="stroke:none"
id="ABC" />
</g>
</g>
</svg>
HERE IS WHAT THE PROGRAM PRINTS OUT:
org.apache.batik.bridge.BridgeContext@65ab90e2
org.apache.batik.dom.svg.SVGOMRectElement@62b51993
null
Exception in thread "main" java.lang.NullPointerException
at RenderableSVG.main(RenderableSVG.java:41)
WHY IS THE VARIABLE gn SET TO null?
SHOULDN'T gn BE SET TO THE OBJECT CORRESPONDING TO THE ELEMENT WITH ID SET
TO "ABC"?
THE LENGTH OF THE RECTANGLE PATH SHOULD BE 400.