You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-commits@xmlgraphics.apache.org by Apache Wiki <wi...@apache.org> on 2008/03/05 17:16:15 UTC
[Xmlgraphics-batik Wiki] Update of "ChangeCss" by FredHansen
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Xmlgraphics-batik Wiki" for change notification.
The following page has been changed by FredHansen:
http://wiki.apache.org/xmlgraphics-batik/ChangeCss
The comment on the change is:
New page
New page:
= Changing CSS Stylesheet for multiple transcodings =
I wanted to recolor a map in several ways, and transcode each into a png.
There is little on the web about how to deal with CSS style sheets in SVG.
Finally I found a message with a suggestion:
http://www.mail-archive.com/batik-users@xmlgraphics.apache.org/msg03376.html
as amended by its reply:
http://www.mail-archive.com/batik-users@xmlgraphics.apache.org/msg03379.html
The folowing outputs two .pngs with different colors for the United States:
{{{
public void testTranscode() {
try {
// make a Document with the base map
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String filename = "C:/maps/BlankMap-World6.svg";
String uri = "file:///" + filename;
Document doc = f.createDocument(uri, new FileReader(filename));
// prepare to modify and transcode the document
SVGDocument sdoc = (SVGDocument)doc;
Element svgRoot = sdoc.getDocumentElement();
PNGTranscoder t = new PNGTranscoder();
TranscoderInput input = new TranscoderInput(doc);
// find the existing stylesheet in the document
NodeList stylesList = doc.getElementsByTagName("style");
Node styleNode = stylesList.item(0);
// append another stylesheet after the existing one
SVGStyleElement style = (SVGStyleElement)
doc.createElementNS(SVG_NAMESPACE_URI, "style");
style.setAttributeNS(null,"type","text/css");
style.appendChild(doc.createCDATASection(".us {fill: blue;}"));
styleNode.getParentNode().appendChild(style);
// transcode the map
OutputStream ostream = new FileOutputStream("outblue.jpg");
TranscoderOutput output = new TranscoderOutput(ostream);
t.transcode(input, output);
ostream.close();
// replace the appended stylesheet with another
SVGStyleElement oldStyle = style;
style = (SVGStyleElement)
doc.createElementNS(SVG_NAMESPACE_URI, "style");
style.setAttributeNS(null,"type","text/css");
style.appendChild(doc.createCDATASection(".us {fill: green;}"));
styleNode.getParentNode().replaceChild(style, oldStyle);
// transcode the revised map
ostream = new FileOutputStream("outgreen.jpg");
output = new TranscoderOutput(ostream);
t.transcode(input, output);
ostream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}}}