Ograničeni XFA FormCalc i JavaScript

HotPDF evaluira XFA skripte izračunavanja dok poravnava formular, sa uvek dostupnom ograničenom FormCalc putanjom i širom QuickJS putanjom koja ostaje onemogućena dok je aplikacija eksplicitno ne omogući

Prošireni FormCalc

FormCalc izrazi podržavaju aritmetiku, stringove, boolove, operatore poređenja, kratkospojne And, Or i Not, plus lenju If(condition, whenTrue, whenFalse) granu

Sum, Avg, Min, Max i Count prihvataju ponovljene numeričke podatke kao što su $record.rows[*].amount; samo se izabrana grana If evaluira, tako da nekorišćena nevažeća grana ne odbija izračunavanje

Ugnježdeni pozivi mogu kombinovati numeričke, string i node-set rezultate, uz determinističku podršku za At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within i Oneof

Korisnički definisane funkcije, petlje, dodela, locale picture klauzule i mrežne funkcije ostaju van nativnog podskupa i ponašaju se fail-closed

InstanceAdd(name, count) i InstanceRemove(name, index) prosleđuju se kroz OnXFAInstanceAction samo nakon validacije argumenata i budžeta operacija

Opcioni JavaScript

Postavite THotPDF.XFAJavaScriptEnabled na True pre ApplyXFAAsAcroForm ili FlattenLoadedXFA da biste pokrenuli skripte čiji contentType bira JavaScript

Izvršno okruženje podržava normalan JavaScript tok kontrole i izvorne tipizirane nizove kao što je Float64Array, ali ne prima objekat datoteke, procesa, mreže, pregledača ili aplikacije; fetch, XMLHttpRequest, WebSocket, require, process i Deno nisu dostupni

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;

Kontekst skripte

JavaScript prima promenljivi this.rawValue, event.value i zamrznutu xfa fasadu

Budžeti i telemetrija

THPDFXFAFormScriptBudgets ograničava bajtove skripti, FormCalc operacije, proteklo vreme, dubinu izraza, stavke ponovljenih nizova, bajtove vrednosti, operacije instanci, JavaScript memoriju, korišćenje JavaScript steka i provere prekida

Budžet steka pruža granicu rekurzije, dok budžeti vremena i prekida zaustavljaju petlje koje se ne završavaju; skripte koje pređu bilo koju granicu bezbedno ne uspevaju i dodaju dijagnostiku u XFAFlattenWarnings

XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected i XFAFlattenInstanceOperations prijavljuju poslednji prolaz poravnavanja

Direktna integracija izvršnog okruženja

Prošireno HPDFXFAFlatten preopterećenje prihvata TXFAFormScriptOptions i TXFAFormInstanceAction direktno; dodelite TXFAFormScriptOptions.JavaScriptEvaluator da biste prilagodili statičko QuickJS vezivanje ili drugi evaluator u vlasništvu aplikacije uz zadržavanje istog omotača i budžeta

Pogledajte TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets i THPDFXFAInstanceAction