xps之path

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)指定的,一组用来创建分段的绘图命令,以及一个可选的关闭命令来创建一个闭合段。绘制命令包括:
  1. Line
  2. Horizontal Line
  3. Vertical Line
  4. Cubic Bézier Curve
  5. Quadratic Bézier Curve
  6. Smooth Cubic Bézier Curve
  7. Elliptical Arc
  • 每个命令由一个字母代表,后边跟0或1个空字符,然后是跟命令参数,参数之间由空格分开,点由逗号分隔的一对数字坐标组成
  • 大小写字母代表不同的含义:大写字母代表绝对值而小写字母代表相对值,相对当前端点(也就是上个命令的终点坐标)的偏移量,后边的值是相对偏移量
  • 若第一个命令用相对值了,则当前端点定义为0,0
  • 若Close命令用了相对值,则当前端点为前边图的第一个点(即起点和终点重合)
  • 如果相同类型的画图命令连续使用多次,重复的命令可能会被省略:

例如:
L 100,200 300,400等价于L 100,200 L 300,400

命令解读及使用

  1. F fFillRule 代表填充,后边的fFillRule为0或1,缺省为0
  2. M x,y or m x,y 新建当前端点,F命令后可以画多个如,但第一个图必须以M开始,随后的图可以省略M,即F命令后的第一个命令一定为M
  3. **L x,y or l x,y 直线(终点坐标)
  4. H x or h x 水平直线(终点x坐标)
  5. V y or v y 竖直直线(终点y坐标)**
  6. 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 曲线
  7. Q x 1 ,y 1 x 2 ,y 2 or q x 1 ,y 1 x 2 ,y 2 二次曲线
  8. S x 1 ,y 1 x 2 ,y 2 or s x 1 ,y 1 x 2 ,y 2 光滑曲线
  9. A x r ,y r r x fArc fSweep x,y or a x r ,y r r x fArc fSweep x,y 弧线
  10. Z or z 闭合线

提取直线

知道了这些,我们就可以提取直线了,其中主要用到的就是F M L H V Z这些字符

提取流程:

  1. 先遍历节点,找到所有的<Path>节点列表
  2. 对每个节点的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']

然后对其提取各个端点

  • 分别判断横线和竖线提取出来
posted @ 2018-07-03 21:47  moonok  阅读(246)  评论(0编辑  收藏  举报