2007-11-24
batik详解(2) 转载
四、解析器模块
SVG有很多没有属性值的微型语法使用,比如SVGTransformable元素中的transform属性,path元素中的
path data d属性等。以前这些属性不能很好的被解析,现在必要时可以通过SVG进程应用程序来使用。
path data d属性等。以前这些属性不能很好的被解析,现在必要时可以通过SVG进程应用程序来使用。
1.解析器,操作者,生产者
在解析模块中,每个微语法通过一对类来支持---解析器和操作者。解析器是一个用来执行解析接口
(用来从一个reader或者一个String中来解析值的接口)的类。操作者是微型语法的一个特殊接口,这
个接口当相应元素的输入被解析后将调用接口中的相应的方法。在这些操作者接口中多种方法和适应类被提供。
(用来从一个reader或者一个String中来解析值的接口)的类。操作者是微型语法的一个特殊接口,这
个接口当相应元素的输入被解析后将调用接口中的相应的方法。在这些操作者接口中多种方法和适应类被提供。
解析器还包含一个错误操作,当输入解析错误时,错误操作的错误方法将被调用。如果错误处理没有跟
解析器关联,那么当发生异常时将抛出ParseException。
解析器关联,那么当发生异常时将抛出ParseException。
解析模块支持的微语法如下:
- Angles
- Clock values
Fragment identifiers
-
这个解析器被用来解析Fragment identifiers(片断定义)的svg允许的各种格式。
- Lengths
-
解析SVG长度值
- Length lists
-
用来解析逗号或者空格分隔的SVG长度列表。
- Numbers
-
用于解析SVG数字值.
- Number lists
-
用来解析逗号或者空格分隔的SVG数字值.
- Path data
-
通过 PathParser执行, 通过 PathHandler处理. 用来解析 SVG path data, 就象path 元素中的d 属性一样.
- Points
-
通过 PointsParser执行, 通过 PointsHandler处理. 用来解析 point 列表, 就象 polygon 元素中的points 属性那样.
- Preserve aspect ratio values (保持屏幕比率值)
-
通过 PreserveAspectRatioParser执行, 通过 PreserveAspectRatioHandler处理. 用来解析在svg元素中的preserveAspectRatio 属性的值。
- Transform lists
-
通过TransformListParser执行, 通过 TransformListHandler处理. 用来解析transform 列表, 就象在
任意可以变换元素中的变换属性那样。
一些微型语法同样也有一个相应的生产者类,这个类是在解析的同时生成对象的一个处理接口的执行。
2.举例
下面例子用来举例怎么用一个解析器来解析一个点列表
import java.awt.geom.Point2D;
import java.util.LinkedList;
import java.util.List;
import org.apache.batik.parser.DefaultPointsHandler;
import org.apache.batik.parser.ParseException;
import org.apache.batik.parser.PointsHandler;
import org.apache.batik.parser.PointsParser;
public class PointsParserExample {
public List extractPoints(String s) throws ParseException {
final LinkedList points = new LinkedList();
PointsParser pp = new PointsParser();
PointsHandler ph = new DefaultPointsHandler() {
public void point(float x, float y) throws ParseException {
Point2D p = new Point2D.Float(x, y);
points.add(p);
}
};
pp.setPointsHandler(ph);
pp.parse(s);
return points;
}
}
这个例子使用 AWTTransformProducer 类来从一个SVG transform列表中生成一个 AffineTransform 对象:
import java.awt.geom.AffineTransform;
import org.apache.batik.parser.AWTTransformProducer;
import org.apache.batik.parser.ParseException;
import org.apache.batik.parser.TransformListParser;
public class TransformParserExample {
public AffineTransform parseTransformList(String s) throws ParseException {
TransformListParser p = new TransformListParser();
AWTTransformProducer tp = new AWTTransformProducer();
p.setTransformListHandler(tp);
p.parse(s);
return tp.getAffineTransform();
}
}
发表评论
- 浏览: 121691 次
- 性别:

- 来自: 广州

- 详细资料
搜索本博客
我的相册
flexlib6-1.jpg
共 27 张
共 27 张
最新评论
-
CAS 单点登录安装笔记1 -- ...
继续往下讲啊
-- by xzs603 -
Flex 开发学习笔记3 - Fl ...
您好 ,我想问一下您如何去掉 flex component 的底字,就是阴影字 ...
-- by vissul -
batik详解(6) 转载
为什么生成的SVG文件在FF3.0上不可以缩小,只是截取了原来图形的一部分。
-- by zhaoxiqian -
CAS 单点登录安装笔记1 -- ...
解决上面问题了
-- by talangniao -
CAS 单点登录安装笔记1 -- ...
安装JA-SIG 到 TOMCAT是怎样进行安装?
-- by talangniao






评论排行榜