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
xfa.get(name, index)čita jednu prikupljenu vrednost podatakaxfa.values(name)vraća zamrznutu kopiju svake ponovljene vrednostixfa.resolveNode(name)ixfa.resolveNodes(name)izlažu poglede sirovih vrednosti samo za čitanjexfa.addInstance(name, count)ixfa.removeInstance(name, index)stavljaju u red validirane povratne pozive hosta
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