Beziehungscache für AcroForm
HotPDF verwaltet einen dokumentlokalen bidirektionalen Index für Endknotenfelder von AcroForm, qualifizierte Feldnamen, Widget-Anmerkungen, Widget-Ordnungszahlen und Seitenpositionen
Suchverhalten
Feldindex und Suche über qualifizierte Namen nutzen nach dem ersten Aufbau direkte Arrays und eine Groß-/Kleinschreibung ignorierende Open-Addressing-Namensmap
Ein Elternfeld kann geerbte /FT-, /Ff- und /Opt-Einträge bereitstellen, ohne selbst ein Endfeld zu sein; benannte Kinder wie group.a und group.b bleiben getrennte indizierte Felder
Die Suche nach Feldindex und qualifiziertem Namen verwendet nach dem ersten Aufbau direkte Arrays sowie eine nicht zwischen Groß- und Kleinschreibung unterscheidende Namenstabelle mit offener Adressierung
GetLoadedFormFieldWidgetPageIndex löst eine Widget-Ordnungszahl in ihre Seite auf, während GetLoadedFormFieldIndexForAnnotation eine Seitenanmerkung auf ihr Feld und ihre Widget-Ordnungszahl zurückführt
Die Mitgliedschaft im Anmerkungsarray hat Vorrang vor einem /P-Eintrag des Widgets; bei fehlerhaft mehrfacher Mitgliedschaft gewinnt die erste passende Seite in Dokumentreihenfolge
In /AcroForm /Fields fehlende Widgets werden für Diagnosezwecke als verwaist indiziert, jedoch nicht als künstliche Formularfelder bereitgestellt
Aufbau und Änderung
Der Cache wird bei Bedarf durch einen Durchlauf des Feldbaums und einen Durchlauf der Seitenanmerkungen erstellt
Das Erstellen geladener Felder erweitert einen gültigen Cache schrittweise, während das Entfernen oder Umbenennen von Feldern, Verschieben von Widgets, Entfernen von Anmerkungen, Registrieren von Zusammenführungen, Zusammenführen von XFA-Feldern und Änderungen der Seitentabelle ihn vor der Änderung des Graphen ungültig machen
Die nächste Beziehungsabfrage baut ihn aus dem aktuellen Objektgraphen neu auf, auch für Widgets ohne /P-Eintrag
Beim Entfernen eines Endfelds werden dessen Widgets und Feldbaum-Eintrag gelöscht, während Geschwisterfelder und deren geerbte Einstellungen erhalten bleiben
Rufen Sie InvalidateLoadedFormRelationshipCache auf, nachdem Sie AcroForm-, Feld-, Widget-, Seiten-/Annots-, /Parent-, /Kids- oder /P-Wörterbücher über Rohobjekt-APIs geändert haben
Leistung und Besitz
Die Namens- und Objektzuordnungen halten ihren Füllgrad unter der Hälfte und bieten für bereits aufgebaute Suchen eine erwartete konstante Laufzeit
Eine Regressionsschranke erstellt 10.000 geladene Felder, belegt lineare Durchlauftelemetrie und verlangt unter Win32 und Win64, dass wiederholte Namenssuchen mindestens hundertmal schneller sind als ein Kaltaufbau mit anschließender Suche
Der Cache speichert nicht besitzende Objektzeiger, und der Zugriff auf den Graphen geladener Dokumente bleibt durch den Aufrufer zu serialisieren
Siehe auch: GetLoadedFormFieldWidgetPageIndex, GetLoadedFormFieldIndexForAnnotation, InvalidateLoadedFormRelationshipCache, GetLoadedFormRelationshipCacheStatistics