Bounded XFA FormCalc and JavaScript

Aplikace HotPDF vyhodnocuje skripty výpočtu XFA při zploštování formuláře s vždy dostupnou ohraničenou cestou FormCalc a širší cestou QuickJS, která zůstává zakázaná, dokud ji aplikace explicitně nepovolí

Extended FormCalc

Výrazy FormCalc podporují aritmetiku, řetězce, logické hodnoty, porovnávací operátory, zkratové And, Or a Not plus línou větev If(condition, whenTrue, whenFalse)

Sum, Avg, Min, Max a Count přijímají opakovaná numerická data, jako jsou rows[*].amount; vyhodnocuje se pouze vybraná větev If, takže nepoužitá neplatná větev neodmítá výpočet

Vnořená volání mohou kombinovat výsledky čísel, řetězců a množin uzlů, s deterministickou podporou At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within a Oneof

InstanceAdd(name, count) a InstanceRemove(name, index) se odesílají přes OnXFAInstanceAction pouze po ověření argumentů a rozpočtu operací

Optional JavaScript

Nastavte THotPDF.XFAJavaScriptEnabled na True před ApplyXFAAsAcroForm nebo FlattenLoadedXFA, abyste spustili skripty, jejichž contentType vybírá JavaScript

Runtime podporuje běžný řídicí tok JavaScriptu a nativní typovaná pole, jako je Float64Array, ale nedostává žádný objekt souborů, procesu, sítě, prohlížeče ani aplikace; fetch, XMLHttpRequest, WebSocket, require, process a Deno nejsou dostupné

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;

Script context

JavaScript dostává měnitelný this.rawValue, event.value a zmrazenou fasádu xfa

Budgets and telemetry

THPDFXFAFormScriptBudgets omezuje bajty skriptu, operace FormCalc, uplynulý čas, hloubku výrazů, položky opakovaných polí, bajty hodnot, operace instancí, paměť JavaScriptu, použití zásobníku JavaScriptu a kontroly přerušení

Rozpočet zásobníku poskytuje hranici rekurze, zatímco rozpočty času a přerušení zastavují nekončící smyčky; skripty, které překročí jakoukoli hranici, selhávají uzavřeně a připojí diagnostiku k XFAFlattenWarnings

XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected a XFAFlattenInstanceOperations hlásí nejnovější průchod zploštění

Direct runtime integration

Rozšířené přetížení HPDFXFAFlatten přijímá TXFAFormScriptOptions a TXFAFormInstanceAction přímo; přiřaďte TXFAFormScriptOptions.JavaScriptEvaluator, abyste přizpůsobili statickou vazbu QuickJS nebo jiný vyhodnocovač ve vlastnictví aplikace při zachování stejného obalu a rozpočtů

Viz TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets a THPDFXFAInstanceAction