THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

Rejestruje nazwany pakiet XFA (XML Forms Architecture) do emisji wewnątrz wpisu AcroForm /XFA dokumentu. PDF 1.7 §12.7.6 + §12.7.8 pozwala AcroForm przenosić tablicę /XFA obok statycznej tablicy /Fields albo zamiast niej, co umożliwia hybrydowe przepływy AcroForm + XFA albo czyste dynamiczne formularze XFA.

 

Delphi syntax:

procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Opis

Każde wywołanie AddXFAPacket rejestruje jeden nazwany pakiet. Typowe nazwy (według specyfikacji XFA 3.3 i PDF 1.7 §12.7.8 Table 234):

 

template - układ formularza + skrypty (największy pakiet w większości dokumentów XFA).

datasets - powiązanie danych (payload XML, względem którego renderuje template).

config - konfiguracja przeglądarki.

connectionSet - zewnętrzne połączenia danych.

localeSet - reguły formatowania zależne od locale.

stylesheet - stylowanie XSLT albo CSS.

xfdf - nakładka danych formularza XFDF.

xmpmeta - metadane XMP.

signature - dane XFA związane z podpisem.

sourceSet - definicje danych po stronie źródła.

 

Przy EndDoc każdy zarejestrowany pakiet staje się jednym pośrednim obiektem strumienia skompresowanego FlateDecode, a tablica AcroForm /XFA przeplata ciągi PDF z nazwami pakietów z referencjami strumieni w kolejności rejestracji, więc układ jest deterministyczny bajtowo. ClearXFAPackets usuwa wszystkie zarejestrowane pakiety (przydatne przy ponownym używaniu instancji THotPDF w wielu dokumentach). XFAPacketCount zwraca bieżącą liczbę.

 

Tylko obsługa na poziomie kontenera

HotPDF nie parsuje XML XFA, nie implementuje dynamicznego silnika układu XFA, nie wykonuje FormCalc ani JavaScript wewnątrz template XFA i nie waliduje struktury template. Wywołujący sam tworzy XML XFA (zwykle przez Adobe LiveCycle Designer albo ręcznie według specyfikacji XFA 3.3), a HotPDF emituje bajty bez zmian.

 

Czytniki konsumenckie z silnikiem XFA (starszy Acrobat / Reader, FormsCentral, niektóre produkty kioskowe) renderują formularz; czytniki bez silnika XFA (Adobe Reader DC od 2017 roku, większość czytników open-source) wyświetlają fallbackowe pola AcroForm, jeśli dokument jest hybrydowym przepływem AcroForm + XFA.

 

Bramki zgodności PDF/A i PDF/X

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 jawnie zabraniają formularzy XFA (dynamiczny silnik układu nie jest deterministycznie archiwizowalny). Przepływy prepress ISO 15930 całkowicie odrzucają formularze interaktywne. AddXFAPacket natychmiast zgłasza wyjątek przy dowolnym niepustym PDFACompliance albo PDFXCompliance z właściwą referencją specyfikacji. Zduplikowane nazwy pakietów zgłaszają wyjątek. Pusty PacketName albo pusty XMLBytes zgłasza wyjątek. RequirePDFVersion(pdf15) automatycznie podnosi wersję dokumentu.

 

Emisja słownika AcroForm

Słownik AcroForm jest emitowany, gdy albo /Fields ma co najmniej jeden wpis, albo zarejestrowano co najmniej jeden pakiet XFA. Wywołujący sprzed v2.119.51, którzy nie rejestrują pakietów, zachowują bajtowo identyczne wyjście /AcroForm.

 

Typowy przepływ pracy (czysty dynamiczny formularz XFA)

 

PDF.BeginDoc;

TemplateBytes := TFile.ReadAllBytes('form-template.xml');

DataBytes     := TFile.ReadAllBytes('form-data.xml');

PDF.AddXFAPacket('xdp:xdp', BytesOf('<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">'));

PDF.AddXFAPacket('template', TemplateBytes);

PDF.AddXFAPacket('datasets', DataBytes);

PDF.AddXFASignaturePacket(SigBytes); { caller-generated XAdES }

PDF.AddXFAPacket('/xdp:xdp', BytesOf('</xdp:xdp>'));

PDF.EndDoc;

 

XDP wrapper, single-stream, dynamic, and signed XFA

Tablicowa forma /XFA musi zaczynać się i kończyć pakietami opakowującymi xdp:xdp, jak teraz pokazuje przykład (ISO 32000-1 §12.7.8). Powiązane interfejsy XFA: SetXFADocument zapisuje cały dokument XFA/XDP jako pojedynczy strumień /XFA, wykluczający się z AddXFAPacket; XFANeedsRendering ustawia flagę /NeedsRendering w katalogu (ISO 32000-1 §7.7.2), aby czytnik ponownie wygenerował dynamiczny formularz XFA przy pierwszym otwarciu; AddXFASignaturePacket osadza wygenerowany przez wywołującego podpis XAdES / XML-DSig jako pakiet signature. HotPDF nigdy nie generuje ani nie analizuje podpisu - wywołujący tworzy go za pomocą biblioteki kryptograficznej XML na danych XFA.

 

Spłaszczanie XFA do AcroForm

ApplyXFAAsAcroForm odwzorowuje bajty XDP/XFA podane przez wywołującego na bieżącej stronie jako natywne widżety AcroForm i proste elementy graficzne. FlattenLoadedXFA wykonuje tę samą konwersję dla wczytanego PDF z osadzonym pakietem /XFA. Przekaż Editable=False, aby ustawić widżety jako tylko do odczytu, i sprawdź XFAFlattenWarnings dla nieodwzorowanych elementów.

 

Zobacz też: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField