dotnet OpenXML 文本字体的选择规则
时间:2022-07-22
本文章向大家介绍dotnet OpenXML 文本字体的选择规则,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在 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 决定使用哪个字体插槽的字体
- U+0000–U+007F latin font
- U+0080–U+00A6 latin font
- U+00A9–U+00AF latin font
- U+00B2–U+00B3 latin font
- U+00B5–U+00D6 latin font
- U+00D8–U+00F6 latin font
- U+00F8–U+058F latin font
- U+0590–U+074F cs font
- U+0780–U+07BF cs font
- U+0900–U+109F cs font
- U+10A0–U+10FF latin font
- U+1200–U+137F latin font
- U+13A0–U+177F latin font
- U+1D00–U+1D7F latin font
- U+1E00–U+1FFF latin font
- U+1780–U+18AF cs font
- U+2000–U+200B latin font
- U+200C–U+200F cs font
- U+2010–U+2029 latin font
- U+2018–U+201F ea font
- U+202A–U+202F cs font
- U+2030–U+2046 latin font
- U+204A–U+245F latin font
- U+2670–U+2671 cs font
- U+27C0–U+2BFF latin font
- U+3099–U+309A ea font
- U+D835 latin font
- U+F000–U+F0FF sym font
- U+FB00–U+FB17 latin font
- U+FB1D–U+FB4F cs font
- U+FE50–U+FE6F latin font
- U+1D400–U+1D7FF latin font
- 其他 ea font
因此这和 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 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
- 克隆虚拟机的注意点
- keepalived+nginx搭建高可用(注意点)
- 我的WCF之旅(10):如何在WCF进行Exception Handling
- 安装nginx出现的问题
- 18.11 LVS DR模式搭建
- Linux基础(day64)
- 我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace
- 物联网设备已沦陷,咖啡机也不能例外
- 我的WCF之旅(13):创建基于MSMQ的Responsive Service
- 开发自己的Data Access Application Block[上篇]
- 18.9/18.10 LVS NAT模式搭建
- 谈谈WCF中的Data Contract (1):Data Contract Overview
- Linux基础(day66)
- 字符串的驻留(String Interning)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于nginx为站点绑定域名以及绑定多个域名
- PBMC or 全血,应该选哪个?
- 关于thinkphp5的报错 "mkdir() Permission denied"的解决
- 不同步节点在线使用Remix开发以太坊Dapp及solidity学习入门 ( 一 ):智能合约HelloWorld
- solidity编写eth智能合约之contract 创建合约(二)
- solidity modifier函数修改器 智能合约开发知识浅学(三)
- solidity struct 结构体创建与使用浅学 (四)
- solidity bytes 智能合约开发知识浅学(五点一)bytes基本概念
- Web程序员的Mysql进阶序二之sql多条数据插入、多条数据更新、多表同时查询
- Web程序员的Mysql进阶序三之sql多表数据删除、子查询、联合查询
- nginx 修改配置文件使之支持pathinfo,且隐藏index.php
- 微信jssdk开发,PHP,必要步骤
- 微信JSSDK分享页面自定义当前链接最简单示例
- (一)python3 只需3小时带你轻松入门—— 编程尝试
- (二)python3 只需3小时带你轻松入门——基本变量