Supplied Rich Text Font Fallback

把 THPDFHeadlessTextAppearanceOptions.FallbackFontFamilies 设为 True,即可在 HPDFBuildHeadlessRichTextFamilyAppearance 或 SetRichTextFieldValueWithFamilies 收到的字族中解析缺失的富文本 glyph

默认为 False,保持对每个原始字族和样式的严格选择;单字体文本构建器不搜索其他字族

Options:= THPDFHeadlessTextAppearanceOptions.Default;
Options.FallbackFontFamilies:= True;
Document.SetRichTextFieldValueWithFamilies(FieldIndex, Runs, Families, Options);

选择与 shaping

解析器在相邻原始样式 run 和段落内的空 run 接缝上使用完整的 Unicode 17 扩展字形簇边界;字族决定从不拆开代理对、组合序列、变体序列或连接符簇

当第一个受影响 run 提供 FontFamilyCandidates 时,其声明顺序优先,每个已配置候选必须覆盖整个字形簇的每个样式部分;无一合格时,转而应用下面的既有所选字族与已供数组回退规则

若所选程序覆盖整个字形簇,继续使用其原始字族;否则解析器先尝试第一个受影响 run 的字族,再按数组顺序尝试已供字族,选出一个覆盖字形簇全部样式部分的字族,并使用对应的真实 regular、bold、italic 或 bold-italic 程序

缺失的样式程序作为候选被跳过,而必须检查的畸形程序产生类型化的 invalid-font 错误;布局与 shaping 控制不要求可见的 cmap glyph;没有任何已供字族覆盖的字形簇产生 haMissingGlyph

既有的上下文 shaping、双向排序、跨样式标记摆放、折行、显式段落分隔和 widget 旋转同样应用于解析出的外观 run

值与事务

回退 run 只在外观准备期间存在;调用方的 run 保持不变,文档在 V 和 RV 中存储原始纯值与原始富标记

类型化点大小与 RGB 分量直接传入外观布局,不从序列化富值重建,后者的规范化文本表示有自身精度

字族感知的 FDF 与 XFDF 导入接受同一选项,并保留既有的不可变源、签名、安全、语义 no-op 和发布契约

边界与依赖

聚合 MaxFontBytes 限制计入回退期间检查的每个字族/样式程序,包括最终未嵌入的合格候选;外观只嵌入所选样式

既有的 UTF-16 输入、glyph、对象和字节预算继续生效,解析最多产生 4096 个样式 run;取消检查覆盖字体选择与标量覆盖,也覆盖布局与发布

复杂 shaping 保留既有的 HarfBuzz 与 FriBidi 依赖;回退只使用已供字体字节,不做隐式系统字体发现、通用别名、下载字体或下载样式表;显式有序字体候选列表保留受支持的行内 CSS 字族顺序

原生字族 API 暴露该选项;Linux named-family JSON 接受同一选择性开启标志并准备真实候选程序;Windows 回调回退加载仍是独立工作

验收

六个原生编译器目标各通过 30 个保存 PDF 上的 199 项检查和 1098 项独立的值、嵌入字体、glyph、shaping、精度、行与可见像素检查;真实的子集与完整字体程序覆盖全部四种样式、跨样式组合标记、阿拉伯文连写、希伯来文、增补连接符、有序字族候选、AES R5/R6、FDF/XFDF、类型化预算和八个选定取消检查点(含最终检查点)

全新 C++Builder 接口在两种架构上均可编译;真实的已发布 missing-glyph 证据以及成功的主/回退/主 widget glyph 证明被单独保留

Named families · Appearance options