Hi,

first of all, thank you for the tips and help and the patience you help
here everybody. 

I deleted SVGGraphics2D from my code and try it now with DOM. I have the
famous problem, that the JSVGCanvas didn't update. I try with the help
of the documentation, a Batik book and the mailing list archive to solve
the problem, but couldn't find the source of it.

When I try to load a SVG from file, the Canvas load the SVG, but after
this no changes are draw:

String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
SVGDocument doc = (SVGDocument)
        factory.createDocument(file.toURI().toString());
jSVGCanvasBackground.setSVGDocument(doc);

I do all the changes in a Runnable. This Runnable is atteched to the
update Manager.

UpdateManager um = jSVGCanvasBackground.getUpdateManager();
Runnable r = new CodilirePainter(model, pm, from_remote);
um.getUpdateRunnableQueue().invokeLater(r);

CodilirePainter is my own class, which implements Runnable.

When I try to create a new SVG with a PNG inside it even don't show me
this file. But I can add shapes etc with no problems. I only cant see
them in the canvas. But when I save the file and open it again, with my
program or any other (texteditor, inkscape), the document is like i want
it and with the added shapes.

File is my PNG, read from disk:

private void genSVG(File file) throws IOException {
        
        DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
        SVGDocument doc = (SVGDocument) impl.createDocument(svgNS, "svg", null);
                        
        
        // encode the png to Base64 to embed it
        String pngBase64 = createPNGB64String(file);
        
        String width = Integer.toString(model.getSize().width);
        String height = Integer.toString(model.getSize().height);
        Element root = doc.getDocumentElement();
        root.setAttribute("width", width);
        root.setAttribute("height", height);
        root.setAttribute("viewBox", "0 0 " + width + " " + height);
        
        Element g = doc.createElement("g");
        g.setAttribute("id", "background");
        Element image = doc.createElement("image");
        image.setAttribute("id", "ScannedDocument");
        image.setAttribute("x", "0");
        image.setAttribute("y", "0");
        image.setAttribute("width", width);
        image.setAttribute("height", height);   
        image.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink";);
        image.setAttribute("xlink:href",pngBase64);
        image.setAttribute("xlink:show","embed");
        image.setAttribute("xlink:type","simple");
        image.setAttribute("xlink:actuate","onLoad");

        g.appendChild(image);
        root.appendChild(g);
        
        jSVGCanvasBackground.setSVGDocument(doc);
}

I don't run it in the UpdateManager, because at this state JSVGCanvas
don't has any Document associated and so no Update Manager is available.
This is correct, or?

Did I forgot something, that UpdateManager works? 

Another question is about Document.getElementById()
Can I use it with SVGDocument? When I do this, I got a
NullPointerException:

Element element = doc.getElementById(id);

When I want to remove a shape from the document, is it enough to grab
the element and then call "doc.removeChild(element);"? Or is it better
to use SAX?


Regards,

Keywan


-- 
Keywan Najafi Tonekaboni
http://www.prometoys.net

[EMAIL PROTECTED]:/# apt-get --purge remove dominion
After unpacking world will be freed.
You are about to do something potentially beneficial
To continue type in the phrase 'Yes, do as We say!'


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

Reply via email to