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
xfa.get(name, index)čte jednu shromážděnou hodnotu datxfa.values(name)vrací zmrazenou kopii každé opakované hodnotyxfa.resolveNode(name)axfa.resolveNodes(name)vystavují pohledy surových hodnot pouze pro čteníxfa.addInstance(name, count)axfa.removeInstance(name, index)zařazují ověřená zpětná volání hostitele
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