Harald Kuhn wrote:

first of all, I switched to Batik users as i think that my new Problem is better located there!

I tried to use getComputedTextLength() as you suggested however I encountered an NullPointerException on the way. I looked into the code and found out that it is thrown inside the getComputedText() Method of SVGTextContentSupport. I isolated this in the following code (using getComputedTextLength directly does have the same result but without a clear StackTrace [unknow source entries!] ). The SVGDocument is obtained via a SVGDocumentLoaderListener

This is to early in the build process to access the SVG DOM. You need to wait until the GVT (graphics tree) is built before you can use most the SVGDOM, before this it doesn't have any graphics information.

   I would suggest waiting for the onload event (in fact just add
your code to an onload DOM event listener).  This will ensure that
the DOM is is ready for this.  Also since your content doesn't have
any 'script' attributes you will need to tell Batik to treat the
document as dynamic (setDocumentState(ALWAYS_DYNAMIC)).

added to a JSVGCanvas which loades the Document (i tried loading the document with setURI(...), loadDocument(..) and with calling both). The Document is a relatively simple SVG Document (source added below).

Any ideas what i am doing wrong ?

Cheers,
Harald




private void process(SVGDocument document) {
NodeList list = document.getElementsByTagName("tspan");
for (int i = 0; i < list.getLength(); i++) {
// the following code is copied from SVGTextContentSupportss static getComputedTextLength Method SVGOMTSpanElement element = (SVGOMTSpanElement) list.item(i);
final SVGOMElement svgelt = (SVGOMElement) element;
final SVGTextContent context = (SVGTextContent)svgelt.getSVGContext();
System.out.println(context); // prints out null with my computer
System.out.println("Length is " + context.getComputedTextLength());
}
}



<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink"; width="602" height="302">
<image x="1" y="1" width="600" height="300" xlink:href="....."/>
<text xml:space="preserve" style= "font:Verdana;fill: black; font-size:32" >
<tspan x="213" y="100">Some Example</tspan>
<tspan x="159" y="130">Text</tspan>
</text>
</svg>






Thomas DeWeese wrote:

Hi Harald,

Harald Kuhn wrote:

I am trying to get the rendered length of a SVG Text Element. As far as i understood, the getTextLength() Method of SVGTextContentElement is supposed to do this.



No you want the "getComputedTextLength" function, "getTextLength" is tied to the "textLength" attribute (which should, if set, be the same as the computed text length but for most content it is not). The "getComputedTextLength()" function _is_ implemented.

However when i tried this, a RuntimeException was thrown and by looking at the code I found out that the Method returns an implementation of AbstractSVGAnimatedLength where getDefaultValue() and getAnimatedValue() are not implemented. My question is, wether there are any plans for implementing this method(s) ?



There is (since it's pretty simple for Batik, in fact I'm not sure why it isn't already). However, as I said above it really wouldn't help you much ;)





---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to