颜色是一个大的主题,在 ECMA 376 里面用了 19 页 A4 描述了颜色,但仅是简单的描述。在 OpenXML 定义了 Scheme Color (schemeClr) 是用来表示主题的颜色,可以跟随主题的更改而更改颜色。例如我的文本设置为主题的文本颜色,那么在我更改文档主题的文本色就可以更改我的文本颜色
在 OpenXML 的颜色里面,其中 Scheme Color (a:schemeClr) 是十分强大的,可以用来作为模版发布,让用户自己一键替换主题色。也提供了给智能排版协助更换主题色的方法
在填充笔刷里,本文说的颜色是放在 SolidColorBrush 里面,也就是在 OpenXML 的 a:solidFill
里面的颜色,大概的文档代码请看下面
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000" />
<a:lumOff val="35000" />
</a:schemeClr>
</a:solidFill>
上面代码的 a:solidFill
使用 a:schemeClr
填充,使用的值是 val="tx1"
而在 a:schemeClr
的 lumMod 和 lumOff 表示颜色转换,更多颜色转换请看 dotnet OpenXML 颜色变换
那么 val="tx1"
表示的颜色是什么?是否可以转 RGB 表示,其实这个值表示的是主题里面的 tx1 也就是 Text1 属性的颜色,需要再次去主题里面找到对应的颜色
假定如上是放在 Slide 页面里面的某个文本的颜色,代码如下
<p:sp>
<p:nvSpPr>
<p:cNvPr id="2" name="标题 1" />
<p:cNvSpPr>
<a:spLocks noGrp="1" />
</p:cNvSpPr>
<p:nvPr>
<p:ph type="ctrTitle" />
</p:nvPr>
</p:nvSpPr>
<p:spPr>
<a:xfrm>
<a:off x="568575" y="84959" />
<a:ext cx="9144000" cy="635000" />
</a:xfrm>
</p:spPr>
<p:txBody>
<a:bodyPr />
<a:lstStyle />
<a:p>
<a:r>
<a:rPr kumimoji="1" lang="zh-CN" altLang="en-US" b="1" dirty="0">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000" />
<a:lumOff val="35000" />
</a:schemeClr>
</a:solidFill>
<a:ea typeface="微软雅黑" panose="020B0503020204020204" charset="-122" />
</a:rPr>
<a:t>林德熙</a:t>
</a:r>
</a:p>
</p:txBody>
</p:sp>
此时想要拿到这个文本的字体的颜色,就需要先获取 Color Map 颜色表,然后找到 Color Scheme 读取实际颜色。默认的 Color Map 在 Slide Master 里面,关于 Slide Master 请看dotnet OpenXML 的 Slide Master 和 Slide Layout 是什么
但是此时在页面里面依