xps之<Path>
元素
- xps文档的
<Path>
代表xps文档里边的线条,包括直线,曲线,弧线等等,那么如何从xps中提取出横线和竖线,从而发现表格呢?这就要仔细解读Data属性.
==
这里研究缩略语法格式的Data属性组成:
Data属性解读
- Figure definitions are specified with a Move command, a set of drawing commands to create segments, and an optional Close command to create a closing segment. Drawing commands include:
- 即图定义是用一个移动命令(M)指定的,一组用来创建分段的绘图命令,以及一个可选的关闭命令来创建一个闭合段。绘制命令包括:
- Line
- Horizontal Line
- Vertical Line
- Cubic Bézier Curve
- Quadratic Bézier Curve
- Smooth Cubic Bézier Curve
- Elliptical Arc
- 每个命令由一个字母代表,后边跟0或1个空字符,然后是跟命令参数,参数之间由空格分开,点由逗号分隔的一对数字坐标组成
- 大小写字母代表不同的含义:大写字母代表绝对值而小写字母代表相对值,相对当前端点(也就是上个命令的终点坐标)的偏移量,后边的值是相对偏移量
- 若第一个命令用相对值了,则当前端点定义为0,0
- 若Close命令用了相对值,则当前端点为前边图的第一个点(即起点和终点重合)
- 如果相同类型的画图命令连续使用多次,重复的命令可能会被省略:
例如:
L 100,200 300,400
等价于L 100,200 L 300,400
命令解读及使用
- F fFillRule 代表填充,后边的fFillRule为0或1,缺省为0
- M x,y or m x,y 新建当前端点,F命令后可以画多个如,但第一个图必须以M开始,随后的图可以省略M,即F命令后的第一个命令一定为M
- **L x,y or l x,y 直线(终点坐标)
- H x or h x 水平直线(终点x坐标)
- V y or v y 竖直直线(终点y坐标)**
- C x 1 ,y 1 x 2 ,y 2 x 3 ,y 3 or c x 1 ,y 1 x 2 ,y 2 x 3 ,y 3 曲线
- Q x 1 ,y 1 x 2 ,y 2 or q x 1 ,y 1 x 2 ,y 2 二次曲线
- S x 1 ,y 1 x 2 ,y 2 or s x 1 ,y 1 x 2 ,y 2 光滑曲线
- A x r ,y r r x fArc fSweep x,y or a x r ,y r r x fArc fSweep x,y 弧线
- Z or z 闭合线
提取直线
知道了这些,我们就可以提取直线了,其中主要用到的就是F M L H V Z这些字符
提取流程:
- 先遍历节点,找到所有的
<Path>
节点列表 - 对每个节点的Data属性操作:
- 对没有空格的cmd加空格后成这样子
'F1 M 32.96,75.04 L 762.08,75.04'
- 排除曲线
- 剩下的Data列表处理为如下格式:
tmpdataList= ['F1', 'M', '32.96,75.04', 'L', '762.08,75.04']
- 然后剔除M前边的元素,得到
dataList=['M', '32.96,75.04', 'L', '762.08,75.04']
然后对其提取各个端点
- 分别判断横线和竖线提取出来