Hello,
I have a general question ! I would like to print an svg that is
currently visible on the screen. To do that i'am cloning the original
svg document with that code :
Document docOrg = svgDoc; // original document
DOMImplementation impl = docOrg.getImplementation();
Document docNew; // new document
docNew = impl.createDocument("http://www.w3.org/2000/svg", "svg", null);
docNew.replaceChild(docNew.importNode(docOrg.getDocumentElement(),
true),
docNew.getDocumentElement());
SVGDocument doc = (SVGDocument) docNew;
((AbstractDocument) doc).setDocumentURI(svgDoc.getURL());
Thats the easy part. But there is an own Animation ( a Thread that sets
some Elements visible and invisible to get a blink animation) ! In the
print this elements should be visible! So i copy the original svg at
anytime and set all elements to visible again.
Element[] elements = ag.getAnimation().getAllElements(true);
if (elements != null || elements.length > 0) {
logger.debug("Cleaning up cloned document for printing (e.g. current
blinking elements => visible) ...");
logger.debug("Will clean up " + elements.length + " elements !");
for (int i = 0; i < elements.length; i++) {
String id = elements[i].getAttribute("id");
Element elt = doc.getElementById(id);
elt.setAttributeNS(null, "visibility", "visible");
}
logger.debug("Cleaned up cloned document for printing.");
}
But this is not done in the UpdateManagerThread ! because i will not
wait with invokeAndWait ?! Could this be a problem ? I mean after that
i print the copied document and then i gets garbage collected => so i
don't do anything with it ?
mfg
Michael Kerschbaum