Interactive Dynamic XFA Widget Runtime
TXFAWidgetRuntime pruža model interakcije neutralan prema hostu za dinamičke XFA obrasce, bez pretvaranja u AcroForm polja ili spljoštavanja njihova sadržaja
Runtime izlaže determinističke granice i stanje widgeta tako da desktop, servis ili prilagođeni renderer može isporučiti vlastiti ulaz, iscrtavanje, pristupačnost i event petlju
Stvori runtime
Stvorite runtime izravno iz XDP bajtova ili pozovite THotPDF.CreateLoadedXFAWidgetRuntime nakon učitavanja PDF-a čiji AcroForm sadrži /XFA unos s jednim tokom ili paketnim nizom
var
Runtime: TXFAWidgetRuntime;
State: TXFAWidgetState;
begin
Runtime := PDF.CreateLoadedXFAWidgetRuntime;
try
if (Runtime <> nil) and (Runtime.WidgetCount > 0) then
begin
State := Runtime.Widgets[0];
Runtime.FocusWidget(State.ID);
Runtime.BeginEdit(State.ID);
Runtime.ReplaceSelection(0, Length(State.Value), 'Updated value');
if not Runtime.CommitEdit then
raise Exception.Create(Runtime.LastDiagnostic);
end;
finally
Runtime.Free;
end;
end;
Tvornica za učitani dokument samo čita graf PDF objekata i postojeće XFAFlattenWarnings; spremanje dokumenta zadržava izvorne unose /XFA i /NeedsRendering
Model interakcije
FocusWidgetiClearFocusodržavaju jedan fokusirani widget i objavljuju poredane focus callbackeBeginEdit,ReplaceSelection,CancelEditiCommitEditzadržavaju Unicode tekst, uključujući vodeće i završne razmakeHitTestpreslikava koordinate stranice na najviši vidljivi widgetOnWidgetInvalidated,OnLayoutChangediOnFocusChangedomogućavaju hostu da osvježi samo pogođeno stanje
Atomska validacija i izračun
Commit razrješava eksplicitna SOM vezanja i trenutačni kontekst podataka ponovljenog retka prije izvođenja validate i calculate skripti
Uređena vrijednost, izračunate vrijednosti, podatkovni čvorovi, model widgeta, fokus i stanje uređivanja, upozorenja i brojači prolaza objavljuju se zajedno tek nakon što se validacija i raspored stabiliziraju
Odbijene skripte, iscrpljeni proračuni, nevažeće UTF-16 granice odabira te iznimke rasporeda ili hostovog mjerenja vraćaju kompletno prethodno stanje i postavljaju LastDiagnostic
Proračuni
TXFAWidgetRuntimeOptions ograničava broj widgeta, duljinu uređene vrijednosti, prolaze izračuna, prolaze reflowa, operacije rasporeda, operacije skripti, utrošeno vrijeme skripti te druge FormCalc ili JavaScript resurse
Ograničenje widgeta primjenjuje se dok se dodaju stavke rasporeda i fragmenti paginacije, dok učitana XFA dekompresija i sklapanje paketa staju na XFA DOM ulazni limit prije parsiranja
MaxLayoutOperations ima zadanu vrijednost 200000 i ograničava i obilazak dokumenta i rad rasporeda; dubina rasporeda ograničena je na 128, dubina cilja događaja i inicijalizacije instanci na 64, a rekurzivno otpremanje događaja se odbija
Ograničeni dinamički eventi
DispatchEvent prihvaća literalne operacije odvojene točka-zarezom u odgovarajućim event skriptama polja s FormCalc ili JavaScript content typem; te se operacije parsiraju izravno i ne zahtijevaju JavaScript DLL
row.instanceManager.addInstance(true);
row.instanceManager.removeInstance(0);
target.presence = "hidden";
addInstance dodaje jednu instancu i prihvaća true, false, 1 ili 0 kao argument spajanja; izostavljeni argument koristi true, a kratki oblik _row.addInstance(1) također je prihvaćen
Podržani model veže svaku postojeću podatkovnu grupu istog imena, pa nova instanca prima novu podatkovnu grupu inicijaliziranu iz zadanih vrijednosti predloška za bilo koji argument spajanja; stvaranje instance ne klonira unesene vrijednosti prethodnog retka
removeInstance koristi cjelobrojni indeks od nule među podatkovnim grupama istog imena odabranog subforma; subform mora imati occur element s ponovljivim maksimumom, a obje operacije provode njegov minimum i maksimum, uključujući max="-1"
Mutacija instanci zahtijeva implicitno imenovano vezanje dataset-a i ASCII imena XML podataka; eksplicitno vezanje na podatkovnu referencu i dvosmisleni roditeljski konteksti odbijaju se prije objave transakcije
Ciljevi se razrješavaju kroz imenovane podređene elemente predloška u okružujućim opsegima eventa, uključujući točkaste putanje i this.parent; manager ugniježđen unutar ponovljenog opsega koristi vlastitu podatkovnu grupu eventa
presence prihvaća visible, hidden i invisible na poljima predloška, draw elementima, subformama i exclusion grupama; skriveni sadržaj ne zauzima prostor toka, dok nevidljivi sadržaj zadržava svoj prostor i izostavlja se iz widgeta i flatten izlaza
Promjene presence primjenjuju se na odabrani čvor predloška i time na sva njegova ponovljena pojavljivanja; presence po instanci s indeksom, inactive, proizvoljni izrazi, varijable, uvjeti, petlje i druge operacije event skripti odbijaju se
Event serija objavljuje promjene podataka, izračune, raspored, fokus i stanje uređivanja zajedno nakon što se reflow stabilizira; svaka odbijena operacija ili iscrpljeni ulazni, operacijski, instancni, vrijednosni, widget, rasporedni ili vremenski proračun vraća kompletno prethodno stanje dokumenta i interakcije
Uklanjanje retka čuva fokus i neriješene izmjene preživjelih podatkovnih grupa čak i kada se njihovi widget indeksi promijene; uklanjanje ili sakrivanje fokusiranog widgeta briše fokus i po uspjehu objavljuje odgovarajući focus callback
Spremi ažurirani obrazac
SaveToBytes vraća kompletan ažurirani XDP runtimea, uključujući izmijenjene datasete i presence atribute predloška; koristite te bajtove s SetXFADocument prilikom pisanja PDF-a ili s HPDFXFAFlatten za ažurirani flatten izlaz
Tvornica učitanog dokumenta stvara neovisan runtime, pa eventi runtimea ne mijenjaju automatski graf objekata izvornog PDF-a
Aktualne granice
Runtime je host objekt s jednom niti i ne pruža GUI, slikar ni opći XFA event-script motor
Ulazak i izlazak iz fokusa izravno su podržani kada ne postoji odgovarajuća event skripta; ograničene event operacije ne impliciraju podršku za kompletan JavaScript, FormCalc, XFA lifecycle evente ni za zaseban form DOM s prezentacijskim nadjačavanjima po instanci
Vidi Bounded XFA FormCalc and JavaScript, XFA Packet DOM i Interactive Document Processing