天天看點

【OpenXml】Pptx的多路徑形狀轉為WPF的Path

本文是将示範如何解析pptx檔案的多路徑的形狀轉換到WPF,繪制多個Shape的Path

這是Pptx的【标注:彎曲曲線(無邊框)】形狀的OpenXml定義部分:

然後以下OpenXml Shape Path的子屬性:

屬性

類型

備注

extrusionOk (3D Extrusion Allowed)

bool

指定使用 3D 拉伸可能在此路徑,預設false或0

fill (Path Fill)

PathFillMode

路徑填充模式:Norm(預設)、None、Lighten、LightenLess、Darken、DarkenLess

stroke (Path Stroke)

是否存在輪廓:預設false

h (Path Height)

int

指定架構的高度或在路徑坐标系統中應在使用的最大的 y 坐标

w (Path Width)

指定的寬度或在路徑坐标系統中應在使用的最大的 x 坐标

首先為什麼是要轉為多個Shape呢?因為OpenXml每條路徑,都能設定是否有輪廓、填充等屬性,而該屬性設定隻能在Shape層,而不能在Geometry層,就算是通過PathGeometry的PathFigure也隻能設定IsFilled(是否填充),不能設定IsStroke(是否有輪廓)

首先我們來建立對應Shape Path的類:

解析pptx形狀的關鍵代碼:

根據openxml的定義算出Shape Path:

将解析好的Shape Path轉為WPF的形狀Path:

然後渲染到界面:

pptx和WPF渲染結果對比:

【OpenXml】Pptx的多路徑形狀轉為WPF的Path

我們會發現,pptx的形狀和wpf的形狀是一模一樣的,同樣的左邊線條的Path是無填充的,而右邊的矩形則是無輪廓有填充的

源碼位址

繼續閱讀