Avgränsad XFA FormCalc och JavaScript
HotPDF utvärderar XFA-beräkningsskript medan ett formulär plattas ut, med en alltid tillgänglig avgränsad FormCalc-sökväg och en bredare QuickJS-sökväg som förblir avstängd tills applikationen uttryckligen aktiverar den
Utökad FormCalc
FormCalc-uttryck stödjer aritmetik, strängar, booleska värden, jämförelseoperatorer, kortslutande And, Or och Not samt den lata If(condition, whenTrue, whenFalse)-grenen
Sum, Avg, Min, Max och Count accepterar blandade skalära och SOM-nodmängdsargument med förankrade, direkta, indexerade, jokerteckens- eller ättlingssökvägar såsom $record.rows[*].amount, endast den valda grenen av If utvärderas, så en oanvänd ogiltig gren avvisar inte beräkningen
Nästlade anrop kan kombinera numeriska, sträng- och nodmängdsresultat, med deterministiskt stöd för At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within och Oneof
Användardefinierade funktioner, loopar, tilldelning, locale-bildklausuler och nätverksfunktioner förblir utanför den inbyggda delmängden och misslyckas stängt
InstanceAdd(name, count) och InstanceRemove(name, index) avsänds genom OnXFAInstanceAction endast efter validering av argument och opérationsbudget
Valfri JavaScript
Ställ in THotPDF.XFAJavaScriptEnabled på True före ApplyXFAAsAcroForm eller FlattenLoadedXFA för att köra skript vars contentType väljer JavaScript
Runtime stödjer normal JavaScript-kontrollflöde och inbyggda typade arrayer såsom Float64Array, men får inget fil-, process-, nätverks-, webbläsar- eller applikationsobjekt, fetch, XMLHttpRequest, WebSocket, require, process och Deno är inte tillgängliga
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;
Skriptkontext
JavaScript tar emot ett föränderligt this.rawValue, ett event.value och en frusen xfa-fasad
xfa.get(name, index)läser ett insamlat datavärdexfa.values(name)returnerar en frusen kopia av varje upprepat värdexfa.resolveNode(name)ochxfa.resolveNodes(name)exponerar skrivskyddade raw-värdevyerxfa.addInstance(name, count)ochxfa.removeInstance(name, index)köar validerade värdanrop
Budgetar och telemetri
THPDFXFAFormScriptBudgets begränsar skriptbytes, FormCalc-operationer, förfluten tid, uttrycksdjup, upprepade arrayobjekt, värdbytes, instansoperationer, JavaScript-minne, JavaScript-stackanvändning och avbrottskontroller
Stackbudgeten tillhandahåller rekursionsgränsen, medan tids- och avbrottsbudgetarna stoppar icke-terminerande loopar, skript som korsar någon gräns misslyckas stängt och lägger till en diagnos till XFAFlattenWarnings
XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected och XFAFlattenInstanceOperations rapporterar det senaste utplattningspasset
Direkt runtime-integration
Den utökade HPDFXFAFlatten-överlagringen accepterar TXFAFormScriptOptions och TXFAFormInstanceAction direkt, tilldela TXFAFormScriptOptions.JavaScriptEvaluator för att anpassa den statiska QuickJS-bindningen eller en annan applikationsägd utvärderare samtidigt som samma omslutning och budgetar behålls
Se TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets och THPDFXFAInstanceAction