Fallback de polices de rich text fournies
Réglez THPDFHeadlessTextAppearanceOptions.FallbackFontFamilies à True pour résoudre les glyphes de rich text manquants depuis les familles fournies à HPDFBuildHeadlessRichTextFamilyAppearance ou SetRichTextFieldValueWithFamilies
La valeur par défaut est False, préservant la sélection stricte de chaque famille et style rédigés ; le builder de texte à police unique ne cherche pas d'autres familles
Options:= THPDFHeadlessTextAppearanceOptions.Default;
Options.FallbackFontFamilies:= True;
Document.SetRichTextFieldValueWithFamilies(FieldIndex, Runs, Families, Options);
Sélection et shaping
Le résolveur utilise des frontières complètes de graphèmes étendus Unicode 17 à travers les runs de styles rédigés adjacents et les coutures de runs vides dans chaque paragraphe ; une décision de famille ne coupe jamais une paire surrogate, une séquence combinante, une séquence de variation ou un cluster de joiners
Quand le premier run affecté fournit FontFamilyCandidates, son ordre déclaré prime et chaque candidat configuré doit couvrir chaque partie stylée du graphème complet ; si aucun ne qualifie, les règles de fallback existantes de famille sélectionnée et de tableau fourni ci-dessous s'appliquent
Si les programmes sélectionnés couvrent le graphème entier, leurs familles rédigées restent en usage ; sinon le résolveur essaie d'abord la famille du premier run affecté, puis les familles fournies dans l'ordre du tableau, en sélectionnant une famille qui couvre chaque partie stylée du graphème complet avec le véritable programme correspondant regular, bold, italic ou bold-italic
Les programmes de styles manquants sont sautés comme candidats, tandis qu'un programme malformé qui doit être inspecté produit une erreur typée de police invalide ; les contrôles de mise en page et de shaping n'exigent pas de glyphes cmap visibles ; un graphème qu'aucune famille fournie ne couvre produit haMissingGlyph
Le shaping contextuel existant, l'ordre bidirectionnel, le placement de marques entre styles, le retour à la ligne, les sauts de paragraphes explicites et la rotation de widgets s'appliquent aux runs d'apparences résolus
Valeurs et transactions
Les runs de fallback n'existent que pendant la préparation des apparences ; les runs de l'appelant restent inchangés et le document stocke la valeur brute d'origine et le markup riche rédigé dans V et RV
Les tailles en points typées et les composants RGB passent directement à la mise en page d'apparence sans être reconstruits depuis la valeur riche sérialisée, dont la représentation textuelle canonique a sa propre précision
Les imports FDF et XFDF conscients des familles acceptent la même option et conservent leurs contrats existants de source immuable, de signatures, de sécurité, de no-op sémantique et de publication
Bornes et dépendances
La limite globale MaxFontBytes compte chaque programme famille/style inspecté pendant le fallback, y compris les candidats valides qui ne sont pas finalement embarqués ; l'apparence n'embarque que les styles sélectionnés
Les budgets existants d'entrée UTF-16, de glyphes, d'objets et d'octets restent en vigueur, et la résolution peut produire au plus 4096 runs stylés ; l'annulation est vérifiée pendant la sélection de polices et la couverture scalaire aussi bien que pendant la mise en page et la publication
Le shaping complexe conserve les dépendances HarfBuzz et FriBidi existantes ; le fallback n'utilise que les octets de polices fournis, sans découverte implicite de polices système, d'alias génériques, de polices téléchargées ou de feuilles de style téléchargées ; les listes explicites ordonnées de candidats de polices conservent l'ordre des familles CSS inline pris en charge
Les APIs natives de familles exposent cette option ; le JSON à familles nommées Linux accepte le même flag opt-in et prépare de véritables programmes candidats ; le chargement de fallback par callbacks Windows reste un travail séparé
Acceptation
Six cibles de compilation natives passent chacune 199 vérifications sur 30 PDF enregistrés et 1098 vérifications indépendantes de valeurs, de polices embarquées, de glyphes, de shaping, de précision, de lignes et de pixels visibles ; de véritables programmes de polices subset et complets couvrent les quatre styles, les marques combinantes entre styles, la ligature arabe, l'hébreu, les joiners supplémentaires, les candidats de familles ordonnés, AES R5/R6, FDF/XFDF, les budgets typés et huit checkpoints d'annulation sélectionnés y compris le checkpoint final
De nouvelles interfaces C++Builder compilent les deux architectures ; les preuves réelles de glyphes manquants publiées et la preuve réussie de glyphe de widget primaire/fallback/primaire réelle sont conservées séparément