Formulierberekening-afhankelijkheidsgraaf
HotPDF bouwt een afhankelijkheidsgraaf over de berekeningsvelden van een geladen AcroForm, zodat een waardewijziging alleen de berekeningen herberekent die deze transitief lezen, in een volgorde waarin elke herberekende waarde al zichtbaar is voor de berekeningen die deze verbruiken
Graafconstructie
THotPDF.BuildLoadedFormCalculationGraph retourneert een snapshot in eigendom van de aanroeper. Elk veld wordt een knooppunt; elk /CO-geregistreerd Calculate-script wordt statisch geanalyseerd met HPDFExtractSafeJavaScriptFieldReferences, dat de veldnamen leest die een veilige-deelverzameling-script aanraakt: de tussen aanhalingstekens geplaatste argumenten van AFSimple_Calculate("OP", ["a","b"]) en de tussen aanhalingstekens geplaatste namen van getField("x")-toegangen, waarbij stringliteralen worden overgeslagen zodat tekstuele vermeldingen niet als verwijzingen worden behandeld
THPDFFormCalcGraph.ResolveLinks lost die namen op in source → dependent-randen en ordent de doelen met een topologische sortering. Velden op een afhankelijkheidscyclus behouden in plaats daarvan de /CO-documentvolgorde, wat overeenkomt met de single-pass-semantiek van een volledige herberekening; een gewijzigd veld herberekent nooit zijn eigen script, zodat cycli niet kunnen heen-en-weer-slaan en een door de gebruiker geschreven waarde altijd wint. Bronnamen die overeenkomen met geen enkel veld worden gerapporteerd via UnresolvedFieldNameCount en produceren geen randen, wat de runtime-resolver weerspiegelt
Incrementele herberekening
RecalculateLoadedFormFieldsIncremental evalueert alleen de beïnvloede afsluiting van de gegeven gewijzigde velden. Schriftoperaties via SetFormFieldValue en SetLoadedFormFieldValueByName accumuleren een vies-set; de parameterloze overload herberekent vanuit die set, zodat een FDF- of XFDF-import gevolgd door één incrementele pas elke afhankelijke berekening ververst zonder niet-gerelateerde aan te raken. Beide overloads en de volledige RecalculateLoadedFormFields-pas verbruiken de vies-set daarna
PDF.LoadFromFile('Order.pdf');
PDF.SetLoadedFormFieldValueByName('qty', '3');
PDF.SetLoadedFormFieldValueByName('price', '19.5');
// Recomputes subtotal and total only, chained in one pass
PDF.RecalculateLoadedFormFieldsIncremental(['qty', 'price']);
Graafinspectie
De graaf stelt per-veld-berekeningstoestand (GetNode), de volledige evaluatiereeks (AllTargets), de beïnvloede afsluiting (AffectedTargets), het aantal doelen op cycli (CyclicTargetCount) en niet-opgeloste bronnamen bloot, zodat tooling precies kan voorvertonen welke berekeningen een bewerking zal activeren