xps之path
阿新 • • 發佈:2018-07-04
研究 操作 得到 osi 分開 例如 就是 曲線 取出 xps之
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‘]
然後對其提取各個端點
- 分別判斷橫線和豎線提取出來
xps之path