如果运行时未设置字体大小,并且正在使用样式,则需要检查样式层次结构。如果未在此处设置,它将恢复为默认值。
正如 ECMA 4ed 第 1 部分在 17.7.2(样式层次结构)中所说:
这个过程可以描述如下:
- 首先,文档默认值应用于文档中的所有运行和段落。
- 接下来,表格样式属性将应用于文档中的每个表格,遵循每个表格指定的条件格式包含和排除。
- 接下来,将编号项目和段落属性应用于使用编号样式格式化的每个段落。
- 接下来,将段落和运行属性应用于由段落样式定义的每个段落。
- 接下来,将运行属性应用于应用了特定字符样式的每个运行。
- 最后,我们应用直接格式化(段落或运行属性不是来自样式)。如果此直接格式包括编号,则应用该编号 + 关联的段落属性。
如果 rFonts 元素(第 17.3.2.26 节)的值引用了不可用的字体,则应用程序通过称为字体替换的过程确定合适的替代字体,该过程在第 17.8.2 节中定义。
docx4j 做这样的事情 - 例如见第 430 行和 ff 在https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/model/PropertyResolver.java
类似的原则适用于字体颜色。
除了说 google traversalutil 之外,我在这里不讨论如何逐字遍历文档(或者更确切地说,逐个运行)
在运行中明确设置字体大小的示例
<w:r>
<w:rPr>
<w:sz w:val="36"/>
</w:rPr>
<w:t>this is 18 points</w:t>
</w:r>
您可以在 Microsoft Word 中或使用 docx4j 进行设置。要查看如何在 docx4j 中执行此操作,您可以使用 webapp 从示例 docx 生成代码,但本质是:
org.docx4j.wml.R yourRun;
yourRun.getRPr().setSz(an HpsMeasure);