1.Office OpenXML 解析(一):Word 中的样式01-28
2.Office OpenXML 解析(二):字体01-293.Office OpenXML 解析(三):页眉和页脚02-06
收起
在 Office OpenXML(OOXML) WordprocessingML 文档中,样式是预定义的表格,编号,段落和字符属性的集合,能够应用于文档中的文本。下文主要了解样式的3个特性。
样式可以继承于其他的同类型样式。这种继承关系是通过指定样式的basedOn
元素来实现的,元素的值表示其父样式的ID。
所以,为了获得某一样式的完整属性,应该遍历其继承树直到未指定basedOn
元素的样式。当同一属性在子样式和父样式中都出现时,子样式中的值会覆盖其父样式中的值。
例如,有如下两个样式:
// 标题 1
<w:style w:type="paragraph" w:styleId="1" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:name w:val="heading 1" />
<w:basedOn w:val="a" /> // 父样式StyleId为"a"
<w:qFormat />
<w:pPr>
<w:outlineLvl w:val="0" />
</w:pPr>
<w:rPr>
<w:rFonts w:eastAsia="黑体" />
</w:rPr>
</w:style>
// 正文
<w:style w:type="paragraph" w:styleId="a" w:default="1" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:name w:val="Normal" />
<w:qFormat />
<w:rsid w:val="002C5BB6" />
<w:pPr>
<w:jc w:val="center" />
</w:pPr>
<w:rPr>
<w:rFonts w:eastAsia="宋体" />
</w:rPr>
</w:style>
其中,“标题 1” 样式通过basedOn
元素指定其父样式为 “正文” 样式,那么,“标题 1” 样式继承了正文中的居中对齐属性,而它的中文字体 “黑体” 覆盖了正文中的 “宋体”。最终,“标题 1” 的样式为 黑体,居中,大纲级别1级。
样式有4种类型:表格、编号、段落和字符。不同类型的样式可以应用于文档中的同一内容,每种样式按下图的顺序来应用:
上图的流程如下:
在 WordprocessingML 文档中,Bold(加粗)是 toggle 属性。如前两节所述,多种样式可以同时影响文档同一块内容的格式。当同一属性出现在一个或多个应用于某个run的样式中时,共同作用的结果和它是否是 toggle 属性有关。
如果属性不是 toggle 属性,那么属性的值应该按照前两节的规则来确定,也就是流程中最后出现的值生效。
如果属性是 toggle 属性,它的值应该是 true
或 false
(或着 1 或 0),那么应该遵循以下规则:
否则,toggle 属性的值按以下方式确定:
如果一个 toggle 属性出现在相同级别的不同样式中,那么应该采用按如下方式第一个出现的值(如果样式中均未出现该属性,那么该属性的值应该使用默认值):
basedOn
元素,那么使用 baseOn
指定的父样式重复上述步骤。bold
属性,但是在其父样式中指定了该属性,并且值为 true
。那么该样式的 bold
属性为 true
。如果一个 toggle 属性出现在不同级别的多个样式中,那么它的值按照下述规则计算:
true
,那么它的值就是 true
。例如,下面这样一个文档:
在表格中,表格应用了一个样式,指定第一行加粗;在第一个单元格中,文字“1行”指定了“标题 1” 字符样式,样式设置了加粗,如下所示:
表格样式:
<w:tblStylePr w:type="firstRow">
<w:rPr>
<w:b />
<w:bCs />
</w:rPr>
</w:tblStylePr>
"标题 1 字符" 样式:
<w:style w:type="character" w:styleId="10" w:customStyle="1" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:name w:val="标题 1 字符" />
<w:basedOn w:val="a0" />
<w:link w:val="1" />
<w:uiPriority w:val="9" />
<w:rsid w:val="00D8098D" />
<w:rPr>
<w:b />
<w:bCs />
<w:kern w:val="44" />
<w:sz w:val="44" />
<w:szCs w:val="44" />
</w:rPr>
</w:style>
根据上述规则,由于 bold 是 Toggle 属性,而且出现在了不同类型的样式中,所以首先判断 bold 属性在文档默认格式中的值是否为 true:
<w:docDefaults xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:rPrDefault>
<w:rPr>
<w:rFonts w:asciiTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:eastAsiaTheme="minorEastAsia" w:cstheme="minorBidi" />
<w:kern w:val="2" />
<w:sz w:val="21" />
<w:szCs w:val="21" />
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="ar-SA" />
</w:rPr>
</w:rPrDefault>
<w:pPrDefault />
</w:docDefaults>
从上面可以看到,在默认值中没有指定 bold 元素,也就是说不符合第一个条件;
然后,按照公式 value = val(table) XOR val(paragraph) XOR val(character) 计算得出:
true XOR false XOR true => false
所以,最终的结果是 false, 也就是不加粗。
如果此时我们对第一个段落应用 “标题 2”段落样式,且“标题 2” 设置加粗,那么最终结果如下:
1 行 = true XOR true XOR true = true;
1 列 = true XOR true XOR false = false;
除了 Bold 外,下面这些元素也是 toggle 属性:bCs (Complex Script Bold) ,caps (Display All Characters As Capital Letters),emboss (Embossing),i (Italics),iCs (Complex Script Italics),iCs (Complex Script Italics),outline (Display Character Outline),shadow (Shadow),smallCaps (Small Caps),strike (Single Strikethrough),vanish (Hidden Text) 。
原网址: 访问
创建于: 2023-06-02 13:00:11
目录: 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 语言中国知识社区
最新评论