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

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