|
I have
had a similar problem, in that I have to retrieve the svg data from a local
database (that is non-networked). So anyhow,
I
created my own class DBDocumentLoader that extends
..batik.bridge.DocumentLoader. That retrieves the information from a
database.
Then I extended JSVGCanvas and
overloaded the loadSVGDocuement(..) function Like below.
My change is the "//Next Line is OBSI
Modification" otherwise it is like the original code in the latest official
release.
/** * Loads a SVG
document from the database, according to the URL *
<em>Note: Because the loading is multi-threaded, the
current * SVG document is not guaranteed to be
updated after this method * returns. The only way
to be notified a document has been loaded * is to
listen to the
<tt>SVGDocumentLoaderEvent</tt>s.</em>
*/ public void loadSVGDocument(String url)
{
stopProcessing();
URL oldURI =
null; if (svgDocument != null)
{ oldURI
=
((SVGOMDocument)svgDocument).getURLObject();
} URL newURI =
null; try
{ newURI
= new URL(oldURI, url); } catch
(MalformedURLException e)
{
userAgent.displayError(e);
return;
} url =
newURI.toString();
fragmentIdentifier = newURI.getRef();
//Next Line is
OBSI Modification loader = new
DBDocumentLoader(userAgent);
nextDocumentLoader = new SVGDocumentLoader(url,
loader);
nextDocumentLoader.setPriority(Thread.MIN_PRIORITY);
Iterator it =
svgDocumentLoaderListeners.iterator();
while (it.hasNext())
{
nextDocumentLoader.addSVGDocumentLoaderListener
((SVGDocumentLoaderListener)it.next());
}
if (documentLoader == null
&&
gvtTreeBuilder == null
&&
gvtTreeRenderer == null)
{
startDocumentLoader();
} }
BTW: Batik guys: Should the batik code read something
like: if (loader == null) loader = new
DocumentLoader(userAgent)
If it were written this way, I could just set the
loader and not have to overwrite this function. What do ya'll
think?
Also note that guaranteed was spelled
incorrectly. :)
PS: I may be making this too complicated, but it
worked. If anyone knows how to do it better, please let me
know!
JON
I succeed in loading a SVG file in a
JSVGCanvas with the loadSVGDocument method.
But, how can I load a SVGDocument in a JSVGCanvas without a
file but a variable of this type?
Do I have to define a new class which inherits from
JSVGCanvas and redefine the paint method?
Thanks.
|