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

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