文字定位依据原嵌入字体、实际字形和基线证据,面向正文字面匹配。替换只适用于受支持的 Regular 原字体、简单 Unicode scalar、水平正向和仅平移的文字区域。
推荐流程
- 读取文档并查询字面匹配及
CanReplace标志。 - 检查候选区域、原字体身份和替换文字是否适合原空间。
- 生成一个新文件,不要直接覆盖唯一输入副本。
- 重新读取输出,核对原文、替换结果和实际页面。
没有匹配、文本相同产生的 Noop 与真正写入是不同结果。模板、批注、复杂 shaping、超出原区域或无法证明原字体几何的替换会拒绝,不会用近似字体或缩放文字冒充成功。
CLI 替换
replace-text 要求至少一个显式审核过的原嵌入字体身份,格式为 SHA256:BYTECOUNT:
ofdrw replace-text input.ofd output.ofd \
--find "旧文本" --replace "新文本" \
--trusted-font SHA256:BYTECOUNT --pages 1,3-5- SHA-256 为 64 位十六进制,BYTECOUNT 为原字体字节数;多个身份可重复传
--trusted-font。 --replace ""表示删除匹配文字。--pages是一基页号或范围,页面位置不能重复。- 输入和输出必须是不同路径;不支持的几何或原区域空间不足会拒绝整个批次。
CLI 不会根据本机同名字体猜测信任身份。调用方应先从来源包和业务字体清单确认实际原字体,再提供哈希与字节数。
CLI 预览(自 0.2.0 起)
替换前可用只读的 locate 查看会匹配哪些位置,参数与上面的 --find、--trusted-font、--pages 含义相同,且从不写文件:
ofdrw locate input.ofd --find "旧文本" --trusted-font SHA256:BYTECOUNT --pages 1,3-5 --json每个命中给出一基页号、匹配文本、毫米字形边界和 canReplace;SDK 无法度量的来源(例如未信任或未嵌入字体)直接报错,而不是返回不完整结果。退出码见 CLI 参考。
验证与限制
替换后分别检查:
- 新文件能否读取,替换范围和页码是否正确。
- 原始未替换文字是否保持不变。
- 文字是否裁切、重叠、错位或产生重复绘制。
- 目标阅读器的显示、Copy/Find 行为;这些 UI 行为需要独立验证。
完整回归、原子文件提交和失败保护的范围见定位替换验收。任意复杂文字重排、自动换字体和跨区域重排不在该入口的承诺内。