Afgrænset XFA FormCalc og JavaScript
HotPDF evaluerer XFA calculate-scripts under fladgørelsen af en formular, med en altid tilgængelig afgrænset FormCalc-sti og en bredere QuickJS-sti, der forbliver deaktiveret, indtil applikationen eksplicit aktiverer den
Udvidet FormCalc
FormCalc-udtryk understøtter aritmetik, strenge, booleans, sammenligningsoperatorer, short-circuit And, Or og Not plus den lazy If(condition, whenTrue, whenFalse)-gren
Sum, Avg, Min, Max og Count accepterer blandede scalar- og SOM node-set-argumenter med rooted-, direkte-, indekserede-, wildcard- eller descendant-paths som $record.rows[*].amount; kun den valgte gren af If evalueres, så en ubrugt ugyldig gren ikke afviser beregningen
Indlejrede kald kan kombinere numeriske, streng- og node-set-resultater med deterministisk understøttelse af At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within og Oneof
Brugerdefinerede funktioner, løkker, tildeling, locale picture clauses og netværksfunktioner forbliver uden for det native delsæt og fejler lukket
InstanceAdd(name, count) og InstanceRemove(name, index) dispatches gennem OnXFAInstanceAction først efter argument- og operationsbudget-validering
Valgfri JavaScript
Sæt THotPDF.XFAJavaScriptEnabled til True før ApplyXFAAsAcroForm eller FlattenLoadedXFA for at køre scripts, hvis contentType vælger JavaScript
Runtime'en understøtter normal JavaScript-kontrolflow og native typede arrays som Float64Array, men modtager intet fil-, proces-, netværks-, browser- eller applikationsobjekt; fetch, XMLHttpRequest, WebSocket, require, process og Deno er utilgængelige
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;
Scriptkontekst
JavaScript modtager en muterbar this.rawValue, en event.value og en frosset xfa-facade
xfa.get(name, index)læser én indsamlet dataværdixfa.values(name)returnerer en frosset kopi af hver gentaget værdixfa.resolveNode(name)ogxfa.resolveNodes(name)eksponerer skrivebeskyttede raw-value-visningerxfa.addInstance(name, count)ogxfa.removeInstance(name, index)sætter validerede host-callbacks i kø
Budgetter og telemetri
THPDFXFAFormScriptBudgets afgrænser scriptbytes, FormCalc-operationer, forløbet tid, udtryksdybde, gentagne array-elementer, værdibytes, instansoperationer, JavaScript-hukommelse, JavaScript-stackforbrug og interrupt-tjek
Stack-budgettet leverer rekursionsgrænsen, mens tids- og interrupt-budgetterne stopper ikke-terminerende løkker; scripts, der overskrider en grænse, fejler lukket og føjer en diagnostik til XFAFlattenWarnings
XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected og XFAFlattenInstanceOperations rapporterer det seneste fladgørelsesgennemløb
Direkte runtime-integration
Det udvidede HPDFXFAFlatten-overload accepterer TXFAFormScriptOptions og TXFAFormInstanceAction direkte; tildel TXFAFormScriptOptions.JavaScriptEvaluator for at tilpasse den statiske QuickJS-binding eller en anden applikationsejet evaluator, mens den samme wrapper og de samme budgetter bevares
Se TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets og THPDFXFAInstanceAction