Supplied Rich Text Font Fallback
Nastavte THPDFHeadlessTextAppearanceOptions.FallbackFontFamilies na True, chcete-li rozřešit chybějící rich-text glyfy z rodin dodaných HPDFBuildHeadlessRichTextFamilyAppearance či SetRichTextFieldValueWithFamilies
Default je False, se zachováním přísného výběru každé autorské rodiny a stylu; builder textu jednoho písma nehledá v jiných rodinách
Options:= THPDFHeadlessTextAppearanceOptions.Default;
Options.FallbackFontFamilies:= True;
Document.SetRichTextFieldValueWithFamilies(FieldIndex, Runs, Families, Options);
Výběr a shaping
Resolver používá kompletní hranice rozšířených grafémů Unicode 17 napříč sousedními autorskými style runy i prázdnými runovými švy uvnitř každého odstavce; rodinné rozhodnutí nikdy nerozřízne surrogate pár, kombinující sekvenci, variation sekvenci ani cluster joineru
Když první dotčený run dodá FontFamilyCandidates, jeho deklarované pořadí má přednost a každý nakonfigurovaný kandidát musí pokrýt každou stylovanou část kompletního grafému; když žádný nekvalifikuje, platí níže uvedená stávající pravidla fallbacku vybrané rodiny i dodaného pole
Když vybrané programy pokryjí celý grafém, jejich autorské rodiny zůstanou v použití; jinak resolver nejdřív zkusí rodinu prvního dotčeného runu, pak dodané rodiny v pořadí pole, a vybere jednu rodinu pokrývající každou stylovanou část kompletního grafému odpovídajícím skutečným programem regular, bold, italic či bold-italic
Chybějící style programy se jako kandidáti přeskočí, zatímco poškozený program, který se musí prohlédnout, vytvoří typovanou chybu neplatného písma; layout i shaping ovládání nevyžadují viditelné cmap glyfy; grafém nepokrytý žádnou dodanou rodinou vytvoří haMissingGlyph
Stávající kontextový shaping, bidirezionální pořadí, umísťování značek napříč styly, zalamování, explicitní konce odstavců i rotace widgetu platí pro rozřešené appearance runy
Hodnoty a transakce
Fallback runy existují jen během přípravy appearance; runy volajícího zůstávají beze změny a dokument ukládá původní prostou hodnotu i autorský rich markup ve V a RV
Typované velikosti v bodech i složky RGB jdou přímo do layout appearance, aniž by se rekonstruovaly ze serializované rich hodnoty, jejíž kanonická textová reprezentace má vlastní přesnost
Importy FDF a XFDF vnímající rodiny přijímají tutéž volbu a uchovávají své stávající kontrakty neměnného zdroje, podpisů, zabezpečení, sémantických no-opů i publikace
Meze a závislosti
Agregátní limit MaxFontBytes počítá každý prohlížený rodina/styl program během fallbacku, tedy i platné kandidáty, kteří se nakonec nevloží; appearance vkládá jen vybrané styly
Stávající rozpočty UTF-16 vstupu, glyfů, objektů i bajtů zůstávají v platnosti a rozřešení může vytvořit nejvýše 4096 stylovaných runů; zrušení se kontroluje při výběru písem i pokrytí skalárů, stejně jako během layoutu i publikace
Složitý shaping si uchovává stávající závislosti HarfBuzz a FriBidi; fallback používá jen dodané font bajty, bez implicitního hledání systémových písem, generických aliasů, stažených písem či stažených stylů; explicitní uspořádané kandidátní seznamy fontů si uchovávají podporované inline CSS pořadí rodin
Nativní rodinná API tuto volbu vystavují; Linux JSON pojmenovaných rodin přijímá tentýž opt-in příznak a připravuje skutečné kandidátní programy; načítání fallbacku Windows callbacků zůstává samostatnou prací
Akceptace
Šest nativních kompilátorových cílů projde každý 199 kontrol nad 30 uloženými PDF a 1098 nezávislých kontrol hodnot, vložených písem, glyfů, shapingu, přesnosti, řádků i viditelných pixelů; skutečné subset i plné font programy pokrývají všechny čtyři styly, kombinující značky napříč styly, arabské spojování, hebrejštinu, supplementární joinery, uspořádané rodinné kandidáty, AES R5/R6, FDF/XFDF, typované rozpočty i osm vybraných checkpointů zrušení včetně finálního
Čerstvá C++Builder rozhraní kompilují obě architektury; skutečné vydané důkazy chybějícího glyfu i úspěšný důkaz skutečných widgetových glyfů primary/fallback/primary se uchovávají odděleně