1.Office OpenXML 解析(一):Word 中的样式01-28
2.Office OpenXML 解析(二):字体01-29
3.Office OpenXML 解析(三):页眉和页脚02-06
收起
在 OpenXML 文档中,字符的字体由 RunFonts 元素指定,如下所示:
<w:r w:rsidRPr="001B7601"> // Run
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:eastAsia="微软雅黑" w:cs="Times New Roman" /> //RunFonts
</w:rPr>
<w:t>中文</w:t>
</w:r>
在一个 RunFonts 元素中,最多可以存在4种字体槽,每种字体槽可以指定一种特有的字体:
RunFonts 元素的详细属性如下:
属性
描述
ascii(ASCII Font)
指定 Unicode编码为U+0000–U+007F 范围内的字符应该使用的字体。如果同时指定了 asciiTheme 属性,那么该属性被忽略。如果未指定该属性,那么应该按照上述样式层级关系来确定它的值;如果在样式层级中均未指定,则应该使用支持该字符的默认字体。
asciiTheme (ASCII Theme Font)
指定 Unicode编码为U+0000–U+007F 范围内的字符应该使用的主题字体。该字体引用自文档主题部件的预定义 theme fonts。
cs (Complex Script Font)
指定被划分到 Complex Script 字体槽中应该使用的字体。如果同时指定了 cstheme 属性,那么该属性被忽略。如果未指定该属性,那么应该按照上述样式层级关系来确定它的值;如果在样式层级中均未指定,则应该使用支持 complex script 内容的默认字体。
cstheme (Complex Script Theme Font)
指定被划分到 Complex Script 字体槽中应该使用的主题字体。
eastAsia (East Asian Font)
指定 Unicode编码为 East Asian范围内的字符应该使用的字体。如果同时指定了 eastAsiaTheme 属性,那么该属性被忽略。如果未指定该属性,那么应该按照上述样式层级关系来确定它的值;如果在样式层级中均未指定,则应该使用支持 East Asian 内容的默认字体。
eastAsiaTheme(East Asian Theme Font)
指定 Unicode编码为 East Asian范围内的字符应该使用的主题字体。
hAnsi (High ANSI Font)
指定 Unicode编码为 High ANSI 范围内(不属于上述三类范围)的字符应该使用的字体。如果同时指定了 hAnsiTheme 属性,那么该属性被忽略。如果未指定该属性,那么应该按照上述样式层级关系来确定它的值;如果在样式层级中均未指定,则应该使用支持 High ANSI 内容的默认字体。
hAnsiTheme (High ANSI Theme Font)
指定 Unicode编码为 High ANSI 范围内(不属于上述三类范围)的字符应该使用的主题字体。
hint (Font Content Type)
指定有歧义的字符应该使用的字体类别。有些字符没有显式地存储在文档中,可以映射为上面提到的四个类别中的多个类别。这个属性就是用于解决这种冲突。
例:
在上面两个 Run 元素中,虽然其中的省略号"…" 具有相同的 Unicode 编码(U+2026),但是由于 hint 属性的存在,它们使用的是不同的字体。
通过下表基于 Unicode 编码确定字符的类别:
Unicode Block
范围
类别
基本拉丁文 (Basic Latin):控制字符,标点符号,数字字母
0000-007F
ASCII 字体
拉丁文补充-1 (Latin 1 Supplement)
00A0-00FF
High ANSI 字体,存在以下例外:
* 如果 hint 属性的值是 eastAsia,那么下列编码的字符使用 East Asian (或eastAsiaTheme)字体:
A1, A4, A7 – A8, AA, AD, AF, B0 – B4, B6 – BA, BC – BF, D7, F7
* 如果 hint 属性的值是 eastAsia 并且 lang(Languages)元素的eastAsia 属性值为“zh”时,下列编码的字符使用 East Asian (或eastAsiaTheme)字体:
E0 – E1, E8 – EA, EC – ED, F2 –F3, F9 – FA, FC
例如,存在下面这样一个 Run 元素:
那么,根据上述规则,第1,3个字符的字体为 “微软雅黑”,第2个字符的字体为 "Times New Roman"。
拉丁文扩展-A (Latin Extended-A)
0100-017F
High ANSI 字体,存在以下例外:如果 hint 属性的值是 eastAsia 并且 lang(Languages)元素的eastAsia 属性值为“zh”,或者 East Asian 字体的字符集为 Big5 或 GB2312 时,使用 East Asian (或eastAsiaTheme)字体。
拉丁文扩展-B (Latin Extended-B)
0180-024F
同上。
国际音标扩展 (IPA Extensions)
0250-02AF
同上。
空白修饰字母 (Spacing Modifiers)
02B0-02FF
如果 hint 属性的值是 eastAsia ,那么使用 East Asian 字体,否则使用 High ANSI 字体。
结合用读音符号 (Combining Diacritics Marks)
0300-036F
同上。
希腊文 (Greek )
0370-03CF
同上。
西里尔字母 (Cyrillic)
0400-04FF
同上。
希伯来文 (Hebrew)
0590-05FF
ASCII 字体
阿拉伯文 (Arabic)
0600-06FF
同上。
叙利亚文 (Syriac)
0700-074F
同上。
阿拉伯文补充 (Arabic Supplement)
0750-077F
同上。
马尔代夫语 (Thaana)
0780-07BF
同上。
朝鲜文 (Hangul Jamo)
1100-11FF
East Asian 字体
常用标点 (General Punctuation)
2000-206F
如果 hint 属性的值是 eastAsia ,那么使用 East Asian 字体,否则使用 High ANSI 字体。
CJK 部首补充 (CJK Radicals Supplement)
2E80-2EFF
East Asian 字体
CJK 符号和标点 (CJK Symbols and Punctuation)
3000-303F
同上。
字母表达形式 (Alphabetic Presentation Form)
FB00-FB4F
FB00-FB1C:如果 hint 属性的值是 eastAsia ,那么使用 East Asian 字体,否则使用 High ANSI 字体。FB1D-FB4F:使用 ASCII 字符。
经过第1步查表之后:
如果字符被划分到了 East Asian 类别中并且 hint 属性的值是 eastAsia,那么该字符就应该使用 East Asian 字体;
否则,如果 Run 元素中存在 <w:cs/>
或者 <w:rtl/>
元素,那么字符就应该使用 Complex Script 字体,不管它的 Unicode 编码在哪个区域;
否则,使用上表中的规则。
上述的流程可以用下图来表示:
例1:下面这个 Run 元素中同时存在阿拉伯字符和英文字符,
<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
</w:rPr>
<w:t>English العربية </w:t>
</w:r>
在这个 Run 元素中,指定了 ASCII 和 Complex Script 两种字体槽,根据前面的“两步”算法,我们可以得知这两种文字都会映射到 ASCII 槽中,也就是都会应用 Courier New 字体。
例2:
<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
<w:rtl/> // RightToLeftText
</w:rPr>
<w:t>English العربية </w:t>
</w:r>
在这个 Run 元素中, 同样根据下面的“两步”算法可以得知,这两种文字都会映射到 Complex Script 槽中,也就是 Times New Roman 字体。
例3:
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" />
<w:bCs/>
<w:rtl/>
</w:rPr>
<w:t>English 中文</w:t>
</w:r>
在这个例子中,“中文” 字符处于 East Asian 类别,同时 hint 属性的值为 eastAsia,所以,这两个字符应用 East Asian 字体,同时,<w:bCs/>
元素不会使其加粗。
对于“English” 字符,由于它不处于 East Asian 类别,同时又存在 <w:rtl/>
元素,那么,它应用的是 Complex Script 字体,同时,<w:bCs/>
元素会使其加粗。
所以,最终显示的时候,“English”字符会加粗,而“中文”字符不会加粗。
原网址: 访问
创建于: 2023-06-02 13:00:20
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论