ADR-0095:有界 Form XObject 语义恢复
状态
已采纳。
背景
PDF 的普通 Form XObject 可复用一组文字、图片和路径。资源表中存在 Form 不代表页面实际调用它;同一对象也可以在不同位置多次绘制。仅因存在 Form 而跳过整页,会丢失本可恢复的内容。直接删除限制又会忽略 Form 的 Matrix、局部资源、隐式 BBox 裁切和状态恢复,把不可见内容错误带入新文档。
决策
语义导入仅扩展普通不透明 Form 的明确子集,按实际 Do 调用处理嵌套和重复实例。资源使用当前 Form 的完整局部资源字典;没有局部资源时继承调用环境,不把两者按同名项目混合。Form 调用支持轴向正等比缩放和平移;可见文字自身的变换也要求等比,以免用普通模型字号冒充拉伸字体。每个实例保留变换后的物理来源、颜色及图片尺寸,退出 Form 后恢复调用环境。
隐式 BBox 参与可见性判断。文字检查变换后的实际字形轮廓,图片检查显示矩形;不能以来源近似框代替字形检查。完全隐藏文字按 PDF_HIDDEN_TEXT / DISCARD 报损,完全隐藏图片按 PDF_IMAGE_TRANSFORM / SKIP_MATCH 报损。部分裁切不能安全表达为当前语义模型,整页按 PDF_STRUCTURE / SKIP_BLOCK 拒绝或跳过;不返回该页已经收集的部分正文。
Tr=3 的不可见文字继续检查实际字形、合法文字和几何,再按隐藏文字丢弃;其轮廓跨越 BBox 不会使本来可恢复的可见正文被跳过。未验证的 ActualText 仍不代替源字形文字。
显式裁切路径、透明组及其他不支持结构继续遵守明确子集和损失策略。恢复支持不扩大原内容流文字编辑、共享 Form 的实例编辑、标签或任意版面重建范围。
失败与预算
Form 的调用、资源、BBox、Matrix 及操作数须验证。循环、畸形输入、缺失引用、实际缺字、预算和取消无条件失败,不能由 WARN/IGNORE 放行。即使前面已发现不支持内容,也继续检查后续实际调用的非法结构;跳页不成为掩盖坏输入的通道。
重复实例的实际执行计入操作符、文字、图片及模型额度,不能仅按唯一流的预检统计放行指数展开。请求内缓存不跨文档共享;已有全资源嵌入字体检查不因未调用 Form 而放宽。
验证与范围
回归覆盖嵌套/重复实例、资源遮蔽及继承、变换后来源、颜色和状态恢复、图片、隐式裁切和失败保护。独立工具生成输入,再通过发布坐标调用方执行真实四格式转换,核对当前内容、损失、图像及新 PDF 全页双渲染。
本单元推进 GAP-10.6,并为 GAP-14.2 增加可复现组合;更广字体、透明合成、Form 原对象编辑及跨平台/阅读器兼容继续保持独立开放状态。