天天看点

【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是无填充的,而右边的矩形则是无轮廓有填充的

源码地址

继续阅读