Ograničeni XFA FormCalc i JavaScript
HotPDF vrednuje XFA calculate skripte tijekom poravnavanja obrasca, s uvijek dostupnim ograničenim FormCalc putem i širim QuickJS putem koji ostaje onemogućen dok ga aplikacija eksplicitno ne omogući
Prošireni FormCalc
FormCalc izrazi podržavaju aritmetiku, stringove, booleane, usporedne operatore, kratko-spajajuće And, Or i Not, plus lijenu granu If(condition, whenTrue, whenFalse)
Sum, Avg, Min, Max i Count prihvaćaju miješane skalarne i SOM argumente skupa čvorova koristeći ukorijenjene, izravne, indeksirane, džokerske ili potomačke putanje poput $record.rows[*].amount; vrednuje se samo odabrana grana If-a tako da neiskorištena nevažeća grana ne odbija izračun
Ugniježđeni pozivi mogu kombinirati numeričke, stringovne i rezultate skupova čvorova, s determinističkom podrškom za At, Choose, Concat, LTrim, RTrim, Str, Stuff, Null, Sign, Exp, Log, Sin, Cos, Tan, Deg2Rad, Rad2Deg, Within i Oneof
Korisnički definirane funkcije, petlje, dodjeljivanje, lokalne slikovne klauzule i mrežne funkcije ostaju izvan izvornog podskupa i otkazuju se zatvoreno
InstanceAdd(name, count) i InstanceRemove(name, index) dispečiraju kroz OnXFAInstanceAction tek nakon validacije argumenata i proračuna operacija
Neobavezni JavaScript
Set THotPDF.XFAJavaScriptEnabled to True before ApplyXFAAsAcroForm or FlattenLoadedXFA to run scripts whose contentType selects JavaScript
Izvedbeno okruženje podržava normalni JavaScript tok kontrole i izvorna tipizirana polja poput Float64Array, ali ne prima objekte datoteka, procesa, mreže, preglednika ili aplikacije; fetch, XMLHttpRequest, WebSocket, require, process i Deno su nedostupni
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 promjenjivi this.rawValue, event.value i zamrznutu xfa fasadu
xfa.get(name, index)reads one collected data valuexfa.values(name)vraća zamrznutu kopiju svake ponovljene vrijednostixfa.resolveNode(name)ixfa.resolveNodes(name)izlažu prikaze sirovih vrijednosti samo za čitanjexfa.addInstance(name, count)ixfa.removeInstance(name, index)stavljaju u red validirane host callbackove
Proračuni i telemetrija
THPDFXFAFormScriptBudgets ograničava bajtove skripti, FormCalc operacije, proteklo vrijeme, dubinu izraza, stavke ponovljenih polja, bajtove vrijednosti, operacije instanci, JavaScript memoriju, upotrebu JavaScript stoga i provjere prekida
Proračun stoga pruža granicu rekurzije, dok proračuni vremena i prekida zaustavljaju petlje koje se nikad ne završavaju; skripte koje prijeđu bilo koju granicu otkazuju se zatvoreno i dodaju dijagnostiku u XFAFlattenWarnings
XFAFlattenScriptsEvaluated, XFAFlattenScriptsRejected i XFAFlattenInstanceOperations izvještavaju o posljednjem prolazu poravnavanja
Izravna integracija u vrijeme izvođenja
Prošireno preopterećenje HPDFXFAFlatten prihvaća izravno TXFAFormScriptOptions i TXFAFormInstanceAction; dodijelite TXFAFormScriptOptions.JavaScriptEvaluator da prilagodite statičku QuickJS vezu ili drugi vrednovatelj u vlasništvu aplikacije uz zadržavanje istog omotača i proračuna
Vidi TXFAFormScriptOptions, TXFAFormScriptLimits, THPDFXFAFormScriptBudgets i THPDFXFAInstanceAction