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

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