在 Office 的文本排版里面,会根据字符选择使用哪个字体插槽。也就是实际上在 Office 里面可以在一个文本段里面指定多个字体,会根据实际的字符使用不同的字体
在做 Office 解析的时候,在 OpenXML SDK 里面是没有找到表示字体的属性的,只能找到 LatinFont 和 EastAsianFont 和 ComplexScriptFont 和 SymbolFont 这几个
public TextFontType LatinFont { get; set; } // latin
public TextFontType EastAsianFont { get; set; } // ea
public TextFontType ComplexScriptFont { get; set; } // cs
public TextFontType SymbolFont { get; set; } // sym
而这每个里面都可以使用不同的字体,如下面的文档
<a:r>
<a:rPr …>
<a:cs typeface="Times New Roman"/>
<a:latin typeface="songti"/>
</a:rPr>
<a:t>
العربية
</a:t>
</a:r>
可以看到这里包含了 a:cs
和 a:latin
分别表示 LatinFont 和 ComplexScriptFont 两个不同的插槽
那么具体的这个我也看不懂的文本应该使用 Times New Roman
还是使用宋体字体,这就需要使用下面这个表格的内容了
在 Office 里面将会根据字符的 Unicode 决定使用哪个字体插槽的字体
因此这和 C# dotnet 获取某个字符所在 Unicode 字符平面映射 不相同
这是 ECMA-376 规定的
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-OpenXML-%E6%96%87%E6%9C%AC%E5%AD%97%E4%BD%93%E7%9A%84%E9%80%89%E6%8B%A9%E8%A7%84%E5%88%99.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。