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

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