Java学习:使用DOM写XML - 绘制中国国旗的SVG文件
http://my.oschina.net/Tsybius2014/blog/543026
下面代码可以绘制出一个SVG格式的中华人民共和国国旗。SVG文件参考了维基百科上的中国国旗SVG文件。
(https://zh.wikipedia.org/wiki/中华人民共和国国旗#/media/File:Flag_of_the_People's_Republic_of_China.svg)
Java代码如下:
package XmlGenerateTest; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * 使用DOM绘制中国国旗的SVG文件 * @author Tsybius2014 * @date 2015年12月11日 * @time 下午11:15:19 * @remark * */ class XmlGenerateTest { /** * 使用DOM绘制中国国旗的SVG文件 * @param args */ public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocumentBuilder(); //生成SVG Document doc = builder.newDocument(); String namespace = "http://www.w3.org/2000/svg"; Element elementSvg = doc.createElementNS(namespace, "svg"); elementSvg.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"); elementSvg.setAttribute("width", "900"); elementSvg.setAttribute("height", "600"); elementSvg.setAttribute("viewBox", "0 0 30 20"); doc.appendChild(elementSvg); Element elementDef = doc.createElement("defs"); elementSvg.appendChild(elementDef); Element elementPath = doc.createElement("path"); elementPath.setAttribute("id", "s"); elementPath.setAttribute("d", "M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z"); elementPath.setAttribute("fill", "#ffde00"); elementDef.appendChild(elementPath); Element elementRect = doc.createElement("rect"); elementRect.setAttribute("width", "30"); elementRect.setAttribute("height", "20"); elementRect.setAttribute("fill", "#de2910"); elementSvg.appendChild(elementRect); Element elementUse1 = doc.createElement("use"); elementUse1.setAttribute("xlink:href", "#s"); elementUse1.setAttribute("transform", "translate(5,5) scale(3)"); elementSvg.appendChild(elementUse1); Element elementUse2 = doc.createElement("use"); elementUse2.setAttribute("xlink:href", "#s"); elementUse2.setAttribute("transform", "translate(10,2) rotate(23.036243)"); elementSvg.appendChild(elementUse2); Element elementUse3 = doc.createElement("use"); elementUse3.setAttribute("xlink:href", "#s"); elementUse3.setAttribute("transform", "translate(12,4) rotate(45.869898)"); elementSvg.appendChild(elementUse3); Element elementUse4 = doc.createElement("use"); elementUse4.setAttribute("xlink:href", "#s"); elementUse4.setAttribute("transform", "translate(12,7) rotate(69.945396)"); elementSvg.appendChild(elementUse4); Element elementUse5 = doc.createElement("use"); elementUse5.setAttribute("xlink:href", "#s"); elementUse5.setAttribute("transform", "translate(10,9) rotate(20.659808)"); elementSvg.appendChild(elementUse5); //输出到文件 File file = new File("C:\\Users\\Tsybius\\Desktop\\FlagOfPRC.svg"); Transformer t = TransformerFactory.newInstance().newTransformer(); t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream(file))); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
生成的XML内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" height="600" viewBox="0 0 30 20" width="900" xmlns="http://www.w3.org/2000/svg"><defs><path d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00" id="s"/></defs><rect fill="#de2910" height="20" width="30"/><use transform="translate(5,5) scale(3)" xlink:href="#s"/><use transform="translate(10,2) rotate(23.036243)" xlink:href="#s"/><use transform="translate(12,4) rotate(45.869898)" xlink:href="#s"/><use transform="translate(12,7) rotate(69.945396)" xlink:href="#s"/><use transform="translate(10,9) rotate(20.659808)" xlink:href="#s"/></svg>
经过格式化后的XML变为这样:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <svg xmlns:xlink="http://www.w3.org/1999/xlink" height="600" viewBox="0 0 30 20" width="900" xmlns="http://www.w3.org/2000/svg"> <defs> <path d="M0,-1 0.587785,0.809017 -0.951057,-0.309017H0.951057L-0.587785,0.809017z" fill="#ffde00" id="s" /> </defs> <rect fill="#de2910" height="20" width="30" /> <use transform="translate(5,5) scale(3)" xlink:href="#s" /> <use transform="translate(10,2) rotate(23.036243)" xlink:href="#s" /> <use transform="translate(12,4) rotate(45.869898)" xlink:href="#s" /> <use transform="translate(12,7) rotate(69.945396)" xlink:href="#s" /> <use transform="translate(10,9) rotate(20.659808)" xlink:href="#s" /> </svg>
这个文件(FlagOfPRC.svg)使用IE8打开,效果如下:
相关推荐
Yakamoz 2020-05-26
与卿画眉共浮生 2020-10-14
xiyang 2020-08-21
baijinswpu 2020-07-29
leonranri 2020-07-26
zhongliwen 2020-07-05
麋鹿麋鹿迷了路 2020-07-05
zengyu00 2020-07-05
XGQ 2020-07-04
CoderBoy 2020-06-28
whbing 2020-06-28
绝望的乐园 2020-06-27
wellfly 2020-06-26
菇星獨行 2020-06-25
草原孤狼 2020-06-25
坚持着执着 2020-06-16
wcqwcq 2020-06-14
yuanye0 2020-06-14
zhongliwen 2020-06-13