提供的 Rich Text 字型後備

把 THPDFHeadlessTextAppearanceOptions.FallbackFontFamilies 設為 True,即可從提供給HPDFBuildHeadlessRichTextFamilyAppearance 或SetRichTextFieldValueWithFamilies 的家族中,解析缺少的 rich text 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、雙向排序、跨樣式 mark 放置、換行、明確段落斷行與 widget 旋轉,都適用於解析後的外觀 run

值與交易

後備 run 只在外觀準備期間存在;呼叫端的 run 保持不變,文件在 V 與 RV 中存放原始純文字值與作者寫下的 rich 標記

typed 點數與 RGB 分量直接傳給外觀版面,不會從序列化的 rich 值重建,後者的標準文字表示有自己的精度

家族感知的 FDF 與 XFDF 匯入接受同一個選項,並保留既有的不可變來源、簽章、安全、語意無操作與發布合約

邊界與相依

彙總的 MaxFontBytes 限制計入後備期間檢視的每個家族/樣式程式,包括最終未內嵌的有效候選;外觀只內嵌所選的樣式

既有的 UTF-16 輸入、glyph、物件與位元組預算持續生效,解析最多可產生 4096 個樣式 run;取消會在字型選取與純量涵蓋期間檢查,版面與發布期間也一樣

複雜 shaping 保留既有的 HarfBuzz 與 FriBidi 相依;後備只使用提供的字型位元組,不做隱含的系統字型搜尋、通用別名、下載字型或下載樣式表;明確有序的字型候選清單保留受支援的行內 CSS 家族順序

原生家族 API 公開這個選項;Linux 具名家族 JSON 接受同一個選擇性旗標並準備實際的候選程式;Windows callback 的後備載入仍屬另外的工作

驗收

六個原生編譯目標各自通過 30 份已存 PDF 上的 199 項檢查,以及 1098 項獨立的值、內嵌字型、glyph、shaping、精度、行與可見像素檢查;實際的 subset 與完整字型程式涵蓋全部四種樣式、跨樣式組合 mark、阿拉伯文接合、希伯來文、增補接合符、有序家族候選、AES R5/R6、FDF/XFDF、typed 預算與八個選定的取消檢查點(含最後一個)

全新的 C++Builder 介面在兩個架構上編譯;真實釋出的 missing-glyph 證據,以及成功的實際 primary/fallback/primary widget glyph 證明,另行保存

具名家族 · 外觀選項