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