OpenType CFF 注释与字段外观

原生外观构建器在既有的 TrueType 输入之外,也接受带 CFF 1 轮廓的 OpenType OTTO 字体

plain、rich、shaped 和 family 文本外观通过 FontFile3、Subtype OpenType 和 CIDFontType0 子字体嵌入完整的原始 OpenType 文件

按名称键控的 CFF 用字形索引充当 CID,而 CID-keyed CFF 保留其真实的 Registry、Ordering、Supplement 以及从字形索引到 CID 的 charset 映射

生成的 Encoding CMap 把文本字符码映射到真实 CID;宽度按这些 CID 计算,ToUnicode 保留逻辑文本,CIDFontType0 不带 CIDToGIDMap

字形位置与边界使用 HarfBuzz OpenType 度量,包括 rich fragment 和组合标记的边界;rich fragment 共享按样式独立的不可变字体读取器和同一个嵌入字体资源

CFF 度量需要匹配架构的 HarfBuzz 库,即便 ShapeComplexText 为 False 也一样;HOTPDF_HARFBUZZ_LIBRARY 可显式指定路径,复杂整形还要额外依赖既有的 FriBidi

没有 normal 外观的可见 FreeText 注释可以使用包含完整 OpenType CFF 字体的合法默认外观资源;既有的资源优先级、裁剪、颜色和只读嵌入策略照常生效

可编辑字段生成仍需要 installable 或 editable 权限;只读回退允许 preview-and-print 权限,restricted 或 bitmap-only 轮廓依旧被拒绝,no-subsetting 会保留每一个原始字体字节

字体字节、字形、对象大小、rich 字体聚合、取消和原生渲染预算仍然强制执行;畸形的 CFF INDEX 偏移、字典、charset 范围、重复 CID 和缺失的集合字符串都会在发布前被拒绝

格式映射遵循 ISO 32000-1:2008 9.7.4.2 和 9.9,包括显式的 CID-keyed OpenType charset 映射

原生渲染、MuPDF 和 Ghostscript 都能通过 sparse-CID OpenType 测试夹具;受测的 Poppler 后端对 sparse-CID OpenType 映射存在独立的不兼容,而 Poppler 的 identity-CID OpenType 和 sparse raw CIDFontType0C 对照组渲染正常

第三方阅读器合成缺失注释外观的方式可能不同;显式生成的外观与各阅读器自身的回退行为是分开校验的

缺失的注释外观也可以通过原始 raw 字体注释路径保留原始的裸 Type1、Type1C 和 CIDFontType0C 资源;OpenType CFF2 输入走单独的静态默认实例外观后端做显式格式转换,而不是把 CFF2 直接嵌进 PDF 1.7 字体流

另见 HPDFBuildHeadlessTextAppearance 与 TryGetCompactFontTable