跳到正文

ADR-0008:排版扩展、输出适配与本地交付 ​

  • 日期:2026-10-14
  • 状态:已采纳,首批本地实现与验证完成;兼容性边界见验收记录

后续扩展:ADR-0009 将复杂文本推进到默认段落路径,并增加模板、字体集合/CFF、执行控制与 PDF 安全/归档/签名。本文保留首批决策背景。

背景 ​

本阶段聚焦稳定性、文字质量、复杂布局、调用入口、文档语义、多格式与发布准备。

决策 ​

保持模型与 Display List 分离。新增组件通过核心 SPI 接入,多格式后端消费同一绘制结果,DOCX 直接映射语义模型。优先使用 JDK 的 OpenType 排版、Java2D、ZIP 和安全 XML;不因新增格式默认引入应用框架或本机字体扫描。

复杂文字采用显式的 OpenType 文本组件:JDK TextLayout 在调用方提供的字体字节上完成组合、字距、连字与双向排版,绘制阶段消费已经确定的矢量轮廓。PDF 使用 ActualText 保留对应的逻辑文字。现有 SimpleTextShaper 的严格契约仍然有效。该方式要求注明轮廓文字的选择/搜索和无障碍兼容边界,不能宣称完整 PDF/UA 或所有 OpenType 特性兼容。

可分页组件承载多栏、矩形浮动绕排和可拆文本行组;语义表格仅在显式允许时拆行。引用换行采用有界预留/重排,脚注续页采用有界容量分配。诊断附加块与页面上下文。所有算法必须每轮消耗内容或明确失败。

DOCX 首版以 OOXML 包实现已声明语义子集,未知结构必须给出损失诊断或严格失败。输出适配器不隐式联网,不执行外部链接、宏或脚本。ZIP/XML 均执行大小、数量和实体限制。

提供 Java Builder、Maven 本地发布、模块 BOM、SBOM 与干净调用方验证。

替代方案与影响 ​

完整塑形、SVG 与扩展 DOCX 能力可以后续通过独立适配器引入,目前先用 JDK 的受限、可验证实现。轮廓文字避免后端重新塑形,但增加路径数量;必须计入文字与路径预算。DOCX 支持矩阵和往返样本比宣称任意 Word 文档无损转换更可验证。

验证 ​

每项能力提供实际源码、调用示例及针对可观察行为的测试;生成的 PDF/SVG/PNG/DOCX 用独立工具核对。大文档与并发测试测量实际结果,发布测试在隔离的本地仓库和调用方工程内运行,不修改用户 Maven 仓库。

具体调用和支持矩阵见生产能力 API,命令、工具和证据见生产能力验收。