ADR-0017:常用编写入口与布局阶段两端对齐
- 状态:已采用。
- 日期:2026-10-15。
背景
已有 API 分层清楚,但普通段落也需要显式 ID、格式和集合构造。标题和列表只有纯文本,模板及 DOCX 无法完整保留样式。普通文字与 OpenType 使用不同换行路径,中文禁则和新增两端对齐必须保持来源与绘制一致。
决策
- 在现有
Document.Builder加入默认格式、自动 ID、列表和等宽文本表格入口,不创建包装模块,不隐藏字体或具体后端。自动 ID 只用于普通内容,引用目标继续显式命名。 DocumentEngine.write(..., Path)默认原子输出,借用流的契约保持。空页区的分节输出提供简短重载,复杂页区与导航继续显式配置。JUSTIFY由布局阶段在已确定的软换行内分配空隙。简单文字修改 advance;OpenType 在视觉空隙后平移字形轮廓及行内对象,不缩放字形,不改变换行与 UTF-16 来源。后端不重新测量。- 新增可选
CJK_STRICT,在原文中检查中文标点和不换行组合,无法放入完整组合时失败。旧构造器使用STANDARD,历史默认布局保持。 - 标题和列表保存不可变
InlineText列表;列表前缀使用默认样式。语义降级、模板、外链矩形与 DOCX 使用这些运行,不把样式提前扁平化。图片与字段不进入这一语义子集。 - DOCX 使用标准
both对齐与禁则提示;引擎严格策略通过可忽略标记保存。未知外部启用禁则按严格损失边界处理,不推测为相同排版规则。
结果
普通调用缩短,复杂场景仍保留明确控制。记录构造器保持源码调用方式;新增枚举值和 record 成员要求调用方重新编译并检查穷尽分支。尚未冻结公共 API。
验收结合最终 PDF 的 CID/TJ advance、轮廓逻辑锚点、独立双渲染、DOCX 结构、隔离 Maven 调用方和有界混合报告压力。压力记录包含 JVM 工作集、私有字节及句柄采样,不能据此宣称长期无泄漏、容量保证或完整流式布局。见调用指南与验收记录。