ADR-0073:单向长表图像及被动外链
状态:已采纳。
背景
固定列单向长表原来只接受普通/纯富文本。共享段落测量已经支持显式 PNG/JPEG,但逐页输出 SPI 只有绘制指令,不能传递被动外链。放开输入而不补齐输出会静默丢失交互。
决策
- 图像继续使用不可变
ImageResource、InlineImage和原文 U+FFFC 位置,复用现有图文测量;固定行框、字体与图片预算保持。图像整块随所在行分页,不隐式获取资源。 - 抽取最终文字/图片链接矩形的共享计算,完整文档及单向路径使用相同逻辑。位置由最终字形推进、轮廓和图片框确定,不在后端重新测量。
PageConsumer与PageWriter增加逐页外链重载。旧实现默认只接受空列表;非空列表明确失败。PDF 同步验证并写入当前页 URI 注释,其他消费方必须显式接入。- 布局累计链接预算包含重复表头呈现;PDF 另累计交互数量及 URI 码点预算。失败停止读取并沿用源关闭、writer 关闭和原子替换契约。
- 只为有链接的当前测量格保留不可变源;有限表头、当前页和一个待放置行之外不收集正文或链接。PDFBox 自有页树/注释对象仍随输出增长。
兼容性与边界
旧 accept(page)、布局入口和四/六参数 StreamingTableLimits 构造调用保留。新增 maxLinks record 组件会改变反射及解构形状,调用方应重新编译。空链接运行仍占运行预算,没有实际文字时不生成虚构注释。
字段、纵向合并、块格、拆行、自动列宽及依赖未来页的语义不因本项获得支持。PDF 加密/归档/签名的单向接入另行设计。图像加载前的调用方资源分配不属于引擎内存保证。