跳到正文

ADR-0020:静态表单与行内矢量布局 ​

  • 状态:已采纳。
  • 日期:2026-10-15。
  • 范围:GAP-05;GAP-03 的定位表格损失边界。

背景 ​

ADR 样例原先将选中框替换为空框字形,再叠加勾线。它依赖字体包含方框,且仅处理普通水平文字。调用方需要维护私有绘制器,不能复用共享复杂文字及完整行续页。

语义表格区域流评估发现,ComponentLayout 只保留绘制和普通诊断;InlineFields 处理顶层语义片段,InlineHyperlinks 依赖源表格。直接将语义表格包装成组件会丢失来源和交互上下文。现有 TableComponent 确实能接受外链而不生成链接。

决策 ​

  1. 自主实现 FormText、ChoiceGroup、CheckMark、LabelValue 和 FillLine,通过 Builder 与混合列入口编写。标记是项目自有矢量轮廓,状态与几何在布局阶段确定。
  2. 文字核心增加不可变 InlineGraphic。显式 U+FFFC 位置参与共享测量和双向排版,使用固定 advance/ascent/descent;已定位轮廓进入现有 TextOutline。不增加绘制回调或后端对象,不扩充语义 InlineContent。
  3. FormText 的标记替换保持 UTF-16 长度;输出逻辑文字恢复原标记。普通标签继续使用真实字体与原缺字策略。绘制阶段不查字体、不重排。
  4. 标准合并格准备流识别 FormText/ChoiceGroup,准备一次,按完整行消费。独立固定标记和填写线保持原子。标签和值分别消费已准备行,避免重复标签或引入不必要的白色表格背景。
  5. 迁移并删除样例私有 AdrCheckText;保留原表单尺寸与虚构内容。独立验收检查最终矢量环、勾选多边形、逻辑状态和页面几何。
  6. 立即修正定位表格的损失边界:字段、外链和具名字体角色在构造时拒绝。语义区域流仍保留为 GAP-03,不能由静态包装或新方法名宣称完成。

后果与下一步 ​

没有新增第三方依赖、字体或素材,继续使用 Apache-2.0 自研声明。原有语义表格、图像和动态字段路径保持。带矢量标记的文字走共享轮廓路径,其 PDF 字节和内部绘制形式不同;不以字节一致性验收,也不自动更新历史视觉基线。

横向选项按普通文字换行,标签内部可断行;没有自动选项整组保持、自动继承全局样式或可编辑控件语义。一般 DOCX 映射和 PDF/UA 仍单独推进。

GAP-03 下一步先设计并实现保留语义子片段与放置变换的组件 IR,再贯通最终字段、外链与上下文诊断;最后接入语义表格区域分配。验收必须同时覆盖页区/嵌套列/连续栏、重复表头实际页字段、图片外链、行列/UTF-16 来源和全局预算。不能提前绘制未解析字段,也不能以转换成 GridTable 丢掉语义来满足入口统一。