Begrensde XFA FormCalc en JavaScript
HotPDF evalueert XFA-berekeningsscripts tijdens het afvlakken van een formulier, met een altijd beschikbaar begrensd FormCalc-pad en een breder QuickJS-pad dat uitgeschakeld blijft totdat de toepassing het expliciet inschakelt
Uitgebreide FormCalc
FormCalc-expressies ondersteunen rekenkunde, tekenreeksen, booleans, vergelijkingsoperatoren, short-circuit And, Or en Not, plus de luie tak If(condition, whenTrue, whenFalse)
Sum, Avg, Min, Max en Count accepteren gemengde scalaire en SOM-knooppuntset-argumenten met gewortelde, directe, geïndexeerde, jokerteken- of afstammingspaden zoals $record.rows[*].amount; alleen de gekozen tak van If wordt geëvalueerd, dus een ongebruikte ongeldige tak verwerpt de berekening niet
Geneste aanroepen kunnen numerieke, tekenreeks- en knooppuntset-resultaten combineren, met deterministische ondersteuning voor At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within en Oneof
Door de gebruiker gedefinieerde functies, lussen, toewijzing, locale picture-clausules en netwerkfuncties blijven buiten de native subset en falen gesloten
InstanceAdd(name, count) en InstanceRemove(name, index) versturen via OnXFAInstanceAction pas na argument- en bewerkingsbudgetvalidatie
Optionele JavaScript
Stel THotPDF.XFAJavaScriptEnabled in op True vóór ApplyXFAAsAcroForm of FlattenLoadedXFA om scripts uit te voeren waarvan contentType JavaScript kiest
De runtime ondersteunt normale JavaScript-controlestroom en native getypeerde arrays zoals Float64Array, maar ontvangt geen bestands-, proces-, netwerk-, browser- of toepassingsobject; fetch, XMLHttpRequest, WebSocket, require, process en Deno zijn niet beschikbaar
var
Budgets: THPDFXFAFormScriptBudgets;
begin
Budgets := THPDFXFAFormScriptBudgets.Default;
Budgets.MaxElapsedMilliseconds := 100;
Budgets.JavaScriptMemoryBytes := 8 * 1024 * 1024;
PDF.XFAFormScriptBudgets := Budgets;
PDF.XFAJavaScriptEnabled := True;
PDF.OnXFAInstanceAction := HandleXFAInstanceAction;
PDF.ApplyXFAAsAcroForm(XDPBytes, False);
end;
Scriptcontext
JavaScript ontvangt een muteerbare this.rawValue, een event.value en een bevroren xfa-gevel
xfa.get(name, index)leest één verzamelde datawaardexfa.values(name)geeft een bevroren kopie van elke herhaalde waarde terugxfa.resolveNode(name)enxfa.resolveNodes(name)tonen alleen-lezen rauwe-waarde weergavenxfa.addInstance(name, count)enxfa.removeInstance(name, index)plaatsen gevalideerde host-callbacks in de wachtrij
Budgetten en telemetrie
THPDFXFAFormScriptBudgets begrenst scriptbytes, FormCalc-bewerkingen, verstreken tijd, expressiediepte, herhaalde-array-items, waardebytes, instantiebewerkingen, JavaScript-geheugen, JavaScript-stackgebruik en onderbrekingscontroles
Het stackbudget biedt de recursiegrens, terwijl de tijd- en onderbrekingsbudgetten niet-beëindigende lussen stoppen; scripts die een grens overschrijden falen gesloten en voegen een diagnose toe aan XFAFlattenWarnings
XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected en XFAFlattenInstanceOperations rapporteren de laatste afvlakkingspass
Directe runtime-integratie
De uitgebreide overload HPDFXFAFlatten accepteert TXFAFormScriptOptions en TXFAFormInstanceAction rechtstreeks; wijs TXFAFormScriptOptions.JavaScriptEvaluator toe om de statische QuickJS-binding of een andere door de toepassing bezitten evaluator aan te passen met behoud van dezelfde wrapper en budgetten
Zie TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets en THPDFXFAInstanceAction