ADR-0072:单向长表固定列横向合并
状态:已接受。
决定
StreamingTable 表头和正文行复用 TableCell.columnSpan,覆盖连续的固定列。每行真实锚点必须完整覆盖规格列数;使用剩余列数比较跨度,避免整数相加溢出。不同源行可以有不同锚点数量,不补造覆盖格。
单行预检按物理起始列检查结构、角色和预算,再按覆盖宽度总和扣一次内边距测量。局部测量结果仅持有物理列号、宽度和文字布局;不保存完整表源,不读取未来行。重复表头和移页正文复用测量结果,沿用整行移动、同步页交付和最多一个待放置行。
来源与预算
IR、异常与缺字诊断使用物理起始列及锚点文字的 UTF-16。源文字、运行、码点和 Summary.sourceCells 只按真实锚点计一次;DocumentLayoutLimits.maxCells 计所有覆盖槽。重复表头仅增加实际输出行与诊断。模型和布局分别验证表头及动态正文,任何跨度不足、越界和非法纵向跨度都不得静默降级。
边界与兼容
没有新增公共类型、依赖或资源。所有旧 span=1 输入保持计数与几何;原来拒绝的横向合并现在接受。纵向合并、自动列宽、块格、图片、链接、字段、拆行和未来语义保持各自的未支持边界。失败仍按既有原子输出及资源所有权契约处理。
本项只扩展固定列排版,不改善 PDFBox 累计页树的内存边界,也不从有限样例推断长期容量。验收见阶段六十四。