Cache de relations AcroForm
HotPDF conserve un index bidirectionnel local au document entre les champs AcroForm terminaux, les noms de champs qualifiés, les annotations de widget, les ordinaux de widget et les positions de page
Comportement des recherches
La recherche par index de champ et par nom qualifié utilise des tableaux directs et une map de noms à adressage ouvert insensible à la casse après la première construction
Un champ parent peut fournir des entrées /FT, /Ff et /Opt héritées sans être un champ terminal ; les enfants nommés tels que group.a et group.b restent des champs indexés distincts
L’index des champs et la recherche par nom qualifié utilisent des tableaux directs et une table de noms sans distinction de casse à adressage ouvert après la première construction
GetLoadedFormFieldWidgetPageIndex résout l’ordinal d’un widget vers sa page, tandis que GetLoadedFormFieldIndexForAnnotation associe une annotation de page à son champ et à l’ordinal du widget
L’appartenance au tableau d’annotations prime sur l’entrée /P d’un widget et, en cas d’appartenance dupliquée mal formée, la première page correspondante dans l’ordre du document l’emporte
Les widgets omis de /AcroForm /Fields sont indexés comme orphelins à des fins de diagnostic, sans être exposés comme champs synthétiques
Construction et mutation
Le cache est construit paresseusement par un parcours de l’arbre des champs et un parcours des annotations de page
La création d’un champ chargé étend progressivement un cache valide, tandis que la suppression, le renommage, le déplacement d’un widget, la suppression d’annotation, l’enregistrement de fusion, la fusion de champs XFA et la mutation de la table des pages l’invalident avant la modification du graphe
La prochaine requête de relation reconstruit le graphe d’objets courant, y compris les widgets sans entrée /P
Retirer un enfant terminal supprime ses propres widgets et son entrée de l’arbre des champs tout en conservant ses frères et leurs réglages hérités
Appelez InvalidateLoadedFormRelationshipCache après avoir modifié les dictionnaires AcroForm, champ, widget, /Annots de page, /Parent, /Kids ou /P par les API d’objets bruts
Performances et propriété
Les tables de noms et d’objets maintiennent un facteur de charge inférieur à la moitié et offrent une recherche à chaud de durée constante attendue
Un contrôle de régression construit 10 000 champs chargés, démontre une télémétrie de parcours linéaire et exige que les recherches répétées par nom soient au moins 100 fois plus rapides qu’une construction à froid suivie d’une recherche sous Win32 et Win64
Le cache conserve des pointeurs d’objets non propriétaires et l’accès au graphe du document chargé reste sérialisé par l’appelant
Voir aussi : GetLoadedFormFieldWidgetPageIndex, GetLoadedFormFieldIndexForAnnotation, InvalidateLoadedFormRelationshipCache, GetLoadedFormRelationshipCacheStatistics