工具和应用程序
三、SVG DOM API
DOM
API定义了一个接口叫做DOMimplementation,这个接口用来表现任意DOM
implementation之间的连
接。这个类的作用是通过提供方法创建一个document来连接一个指定的DOM实例。然后具体的Document
表现为一个XML Document 并且跟各种各样的DOM对象工厂比如Element,Attr,Text那样动作。
那么怎样才能获得一个依赖于你使用的DOM
Implementation的DOMImplementation 实例呢?在Batik中DOM
Implementation存在于包org.apache.batik.dom.svg中,类名为SVGDOMImplementation。以下例子表示怎
样获取一个具体的DOMImplementation对象:
import org.w3c.dom.DOMImplementation;
import org.apache.batik.dom.svg.SVGDOMImplementation;
DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
一旦你已经拥有了一个DOMImplementation 实例,你将不能再依赖于batik的指定代码而要准备好使用
DOM API了。
1.创建一个Doucument
使用DOMImplementation,你现在将可以创建一个Document。下面将举例说明怎么创建一个SVG Document。
注意Batik的
DOM implementation可以被用来表现一个SVG Document片断或者任意的XML Document。注意通过选择
命名空间URI和
SVG根元素本地名,我们将创建一个SVG Document。
import org.apache.batik.dom.svg.SVGDOMImplementation; import org.w3c.dom.Document; // 在SVGDOMImplementation中我们使用了一个不变的常量 // but we could have used "http://www.w3.org/2000/svg". String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI; DOMImplementation impl = SVGDOMImplementation.getDOMImplementation(); Document doc = impl.createDocument(svgNS, "svg", null);
当我们已经创建了一个SVG Document时,如果需要的话,我门可以映射这个document到一个SVGDocument。
2.创建一个SVG Document
最后使用Document对象,我们现在将构造SVG内容。注意上边创建的document,同时支持通用的XML和SVG。
虽然Batik的DOM implementation是一个SVG DOM implementation,但是依赖于已经呈现的Document
的指定的SVG方法,不能用于此点。
Document 可以使用DOM Leve2核心方法创建。以下的例子显示怎样在一个(400,450)范围的SVG屏幕中在
(10,20)点创建一个大小为(100,50)的红色矩形。
import org.apache.batik.dom.svg.SVGDOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; DOMImplementation impl = SVGDOMImplementation.getDOMImplementation(); String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI; Document doc = impl.createDocument(svgNS, "svg", null); // 获得根元素(‘svg‘ 元素). Element svgRoot = doc.getDocumentElement(); // 设置‘svg‘根元素的宽,高属性. svgRoot.setAttributeNS(null, "width", "400"); svgRoot.setAttributeNS(null, "height", "450"); // 创建矩形 Element rectangle = doc.createElementNS(svgNS, "rect"); rectangle.setAttributeNS(null, "x", "10"); rectangle.setAttributeNS(null, "y", "20"); rectangle.setAttributeNS(null, "width", "100"); rectangle.setAttributeNS(null, "height", "50"); rectangle.setAttributeNS(null, "fill", "red"); // 绑定 rectangle 到‘svg‘根元素. svgRoot.appendChild(rectangle);
3.从一个SVG文件中创建一个Document
使用Batik,你也可以从一个URI,一个InputStream或者一个Reader中使用SAXSVGDocumentFactory
创建一个SVG DOM树。下面的例子将举例说明怎么从一个URI中使用SAXSVGDocumentFactory类来创建|
一个SVG document。
import java.io.IOException; import org.apache.batik.dom.svg.SAXSVGDocumentFactory; import org.apache.batik.util.XMLResourceDescriptor; import org.w3c.dom.Document; try { String parser = XMLResourceDescriptor.getXMLParserClassName(); SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser); String uri = "http://www.example.org/diagram.svg"; Document doc = f.createDocument(uri); } catch (IOException ex) { // ... }
原文:http://www.cnblogs.com/aimengying/p/3612225.html