跳到正文

ADR-0094:显式 PDF 源字体映射与不透明图形状态恢复 ​

状态 ​

已采纳。

背景 ​

外部 PDF 可以只声明字体名称而不嵌入程序。阅读器可能使用本机字体显示,但字体发现无法保证确定性,也会造成任务间共享状态。既有渲染入口因此拒绝未嵌入字体。另一方面,语义恢复把所有 gs 操作都视为复杂结构,即使状态仅声明不透明度为 1 或普通线条参数,也会跳过整页。

这两种扩展分别属于源字形呈现和语义结构识别,不能通过放宽通用预检互相获得支持。

决策 ​

页面渲染与光栅脱敏增加按准确 BaseFont 名称登记的显式源字体映射,字体使用已有不可变 PdfFont。配置在准备入口取快照,字体来自调用方提供的静态 TrueType 字节;不扫描系统字体,不修改全局字体映射器。仅对无嵌入程序、具有受支持单字节编码和可确定源字宽的简单字体建立操作内替代。

映射保留源内容流字节、编码、ToUnicode 和源字宽;十二个确切的拉丁标准字体缺少显式字宽时使用当前固定依赖内的 AFM 度量,其他别名须明确提供源度量。替代字体的轮廓可能不同,因此通过 RENDER_FONT_MAPPING / DEGRADE 明确报告,默认 ERROR;WARN/IGNORE 使用同一真实处理,IGNORE 仍返回损失。没有匹配源字体的登记不产生替代损失。源输入快照及文件不被修改,映射不扩大内容流文字编辑或语义恢复的字体范围。

语义恢复独立接受明确白名单的不透明 ExtGState。普通线条状态按实际绘制执行,路径继续通过已有矢量丢弃损失处理;CA/ca 只能为 1,混合模式只能为 Normal/Compatible,软蒙版只能为 None。字体设置、透明度、其他混合模式、软蒙版、转移函数及未知键没有受支持语义映射,继续整页拒绝或按已有策略跳过。类型/值错误、缺失状态资源及畸形操作数无条件失败。

Form 的隐式 BBox 裁剪、Matrix、资源作用域、重复实例及共享对象编辑仍须单独实现和验收。不得删除已有 Form/裁剪检查,或把此次普通图形状态支持视为任意 Form 内编辑。

资源与验证 ​

映射及状态检查须执行操作内预算、同步取消和资源关闭;损坏字体、实际缺字、非法结构及权限失败不能通过损失策略放行。脱敏只接受所有页面均成功渲染的候选,不会因跳页而产生部分成功结果。

输入语料由独立解析工具生成。映射的像素控制使用相同编码、字宽和位置、显式嵌入指定 TrueType 的 PDF;不使用未嵌入源在本机阅读器中的隐式替代结果作为正确性基准。图形状态验收核对当前文字、颜色、来源框、状态恢复及三动作报告,结合发布坐标调用方和独立输出检查。

这两个交付单元扩大 GAP-10.6 的明确子集,并同步增加 GAP-14.2 的可复现语料;不关闭更广字体、Form、图层、标签或跨平台兼容缺口。