一、概述
Batik是为想使用svg格式图片来实现各种功能的应用程序和Applet提供的一个基于java的工具包。
工程创建的目的是为开发者提供一系列可以结合或单独使用来支持特殊的svg解决方案的核心模块。模块主要有SVGParser,SVGGernerator,SVGDOM。Batik工程的其他目的是使它具有高度的扩展性----举个例子,Batik
允许开发者使用自定义的SVG元素。即使工程的目标是提供一系列核心模块,但是还是提供了一个完整的SVG浏
览器,以便证实各个模块的有效性和交互性。
二、batik的用途
通过Batik,你可以在任何使用到java的地方操作SVG文档。你也可以使用各种Batik模块来在你的应用程序和Applet
中来生成,操作和转换你的svg图像。
batik使通过java处理SVG内容变的简单。举个例子,通过使用batik的SVGGernerate模块,java应用程序和Applet
可以非常简单的使输出图像的格式为SVG。使用batik的SVG viewing component, 应用程序或者Applet可以非常容
易的整合SVG查看和交互功能。另外还可以使用Batik的模块将SVG转换为其他格式,比如说JPEG等图像格式和
PDF等其他向量格式.
Batik工具包包含如下各项:
模块
工具和应用程序
三、SVG DOM API
DOM API定义了一个接口叫做DOMimplementation,这个接口用来表现任意DOM implementation之间的连
接。这个类的作用是通过提供方法创建一个document来连接一个指定的DOM实例。然后具体的Document
表现为一个XMLDocument并且跟各种各样的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) {
// ...
}