在 OpenXML 的颜色画刷填充,有特殊的填充是 GrpFill 属性,对应 OpenXML SDK 定义的 DocumentFormat.OpenXml.Drawing.GroupFill 类型
本文属于 OpenXML 系列博客,前后文请参阅 Office 使用 OpenXML SDK 解析文档博客目录
在颜色画刷的定义,如形状的填充色,在形状放入到组合里面时,可以让形状的颜色继承组合的颜色。根据 ECMA 376 的 20.1.8.35 章文档,通过 grpFill (Group Fill)属性可以让形状等元素的画刷继承组合元素的画刷,如下面文档内容,下面文档忽略很多代码,只是作为例子
可以看到在组合内有两个矩形,其中第一个矩形的填充写的是 <a:grpFill />
采用组合元素的填充。而组合元素的填充如下
我以为大家都能看出 RGB 的值,因此就截图此时的文档从 PowerPoint 打开的界面,不标注每个矩形的颜色
可以看到左边的矩形采用了 565656
的颜色,而另一个矩形采用自己定义的 F6F656
颜色。也就是说第一个矩形的颜色是从组合读取的
使用 OpenXML SDK 读取的代码如下
以上的测试文件和代码放在 github 和 gitee 欢迎访问
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源
获取代码之后,进入 PptxDemo 文件夹
那如果是放在组合的组合里面的元素呢?规则和 WPF 资源相同,越靠近元素的越优先。如下面文档代码,只有最上层的组合存在组合填充,在第二层组合里面没有组合填充,此时的矩形将会使用最上层的组合的填充
从 PowerPoint 打开的界面如下
修改一下逻辑,如下
上面代码在获取到当前形状的上一层组合,拿不到画刷时,将会继续尝试去找组合的组合
以上代码和测试文件放在 github 和 gitee 欢迎访问
可以继续在当前代码仓库里面输入以下命令获取
那如果元素没有放入到组合呢?也就是某个形状设置填充色采用继承组合的画刷,但是此形状没有在组合内。在 PowerPoint 的行为是此元素将丢失填充色,相当于没有填充
如以下的文档内容,有一个形状使用了 grpFill 但是没有放在组合里面
从 PPT 里打开可以看到此形状是不可见的
咱使用代码读取的方法如下
以上代码和测试文件放在 github 和 gitee 欢迎访问
可以继续在当前代码仓库里面输入以下命令获取
更多请看 Office 使用 OpenXML SDK 解析文档博客目录
原文链接: http://blog.lindexi.com/post/dotnet-OpenXML-%E7%BB%A7%E6%89%BF%E7%BB%84%E5%90%88%E9%A2%9C%E8%89%B2%E7%9A%84-GrpFill-%E5%B1%9E%E6%80%A7
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。