跳到正文

XML 默认字体与颜色 ​

模板可以分别配置正文/列表、六级标题及表格单元格的默认字体角色和 RGB。纸张、字号、行距仍由已有页面/段落/单元格格式控制。示例见 XmlTextDefaultsExample。

java
var compiler = XmlTemplate.builder().theme(theme)
        .bodyText(text -> text.fontRole("regular").rgb(0x333333))
        .headingText(1, text -> text.fontRole("bold").rgb(0x224488))
        .cellText(text -> text.fontRole("regular").rgb(0x000000))
        .build();

配置值为适配器自有的 XmlTemplate.TextDefaults(fontRole, rgb),也提供 Builder/toBuilder。它只包含两项外观属性,不接受完整 InlineStyle 后忽略字号或装饰。未声明的域取 DocumentTheme 对应外观;默认主题仍为 TextDefaults.DEFAULT(空角色和黑色)。显式 TextDefaults 是完整覆盖;标题级别为 1~6,正文域不传播到标题或表格。

角色名称为空,或符合 [A-Za-z_][A-Za-z_0-9]{0,255};RGB 为 0x000000~0xFFFFFF。名称不加载字体,渲染时须由引擎显式注册。未知角色在布局失败,不能因模板编译成功而视为字体可用。Builder/回调结果按边界取快照;失败回调不改已有配置。

模板中的覆盖规则 ​

xml
<document version="1">
  <heading level="1">报告标题</heading>
  <p>默认文字 <span color="#000000">只改颜色</span>
    <span role="" color="#000000">默认字体和黑色</span></p>
  <numbered list-id="checks">编号与普通正文共享块默认值</numbered>
  <p role="bold" color="#224488">当前块:
    <link href="https://example.com/report">链接文字</link>
    第 <page-number width="24"/> 页</p>
</document>
位置默认与覆盖
p、bullet、numbered取正文默认值;局部 role/color 仅改出现的属性
heading取对应级别默认值,再应用局部属性
cell取单元格默认值,再应用局部属性;传给其直接块格 p
未命名 span、link 文字及四类字段继承所在块/格的已解析外观;自身支持的属性再覆盖
命名 span style="..."完整命名 InlineStyle 优先,再应用局部属性;空角色和黑色仍为显式值
命名 p style="..."只选择完整 ParagraphFormat,不改变外观范围

role="" 明确恢复渲染器默认字体组,color="#000000" 明确设置黑色,不按空字符串或数值猜未声明。列表标记在读取子运行前取块默认值,首个 span 不能暗中改变编号。Java 模型的独立标记 API 见列表标记。

块格 p 可再覆盖该格的默认值;内表重新使用全局单元格默认值,不继承外格局部颜色或字体。与原有内表几何范围一致。图片的 U+FFFC 专用占位运行沿用模型规则,不请求文字字形;图片前后文字按所在范围设置。

显式 TextDefaults 在 theme 前后设置均优先,几何 setter 不清除它。回调从当前解析外观开始并固定完整值;inheritBodyText()/inheritCellText()/inheritHeadingText(level) 清除相应完整覆盖,恢复当前及未来主题。局部 size 和 line-height 仍按既有规则解析,外观不会自动扩大行框。全部分支及引用片段在编译时检查,绑定数据仅作文字;原有输入/展开/绑定预算和取消契约保持。

本单元的默认外观只作用于正文/标题/单元格,不提供完整 CSS 级联。后续页区指南提供 XML 页眉页脚及 DocumentTheme.headerStyle/footerStyle,各分域覆盖独立,未声明外观共用主题全局默认。Java 自定义页区也可通过组件文字 API配置。TextDefaults 设计见 ADR-0047,证据见阶段四十。