Przejdź do głównej zawartości
getnextpdf.com

Pro edycja

Form — szczegółowa dokumentacja referencyjna

Ta strona to szczegółowa dokumentacja referencyjna modułu Pro Form. Obejmuje ekstrakcję wartości AcroForm, odczyt i zapis XFDF, wiązanie danych oraz ekstrakcję danych XFA. Moduł konsumuje wartości NextPDF\Form\FormField wytwarzane przez czytnik formularzy Core i dodaje do nich serializację, parsowanie oraz wiązanie. Obsługa XFA jest zorientowana na dane: parser strukturyzuje pakiety template i datasets. Nie wykonuje skryptów obliczeniowych XFA ani nie renderuje dynamicznych układów XFA.

Ta funkcjonalność jest dostarczana w NextPDF Pro (nextpdf/pro) i aktywuje się wraz z kopertą licencyjną poziomu Pro. Wdrożenie bez tego uprawnienia nie ładuje klas tej funkcjonalności. Porównaj edycje i uzyskaj licencję.

Nie istnieje flaga licencji dla pojedynczej funkcji. Jest to funkcjonalność edycji Pro.

SymbolParametryDomyślne zachowanieZwracaZgłasza lub kończy się błędemUwagi
FormDataExtractor::extractlist<FormField> $fieldsOdczytuje nazwę i wartość każdego polaXfdfDataUwzględnia pola, których wartość jest pusta.
FormDataExtractor::toArraylist<FormField> $fieldsBuduje mapę łańcuchów nazwa-wartośćarray<string, string>Późniejsza zduplikowana nazwa nadpisuje wcześniejszą.
FormDataExtractor::toXfdflist<FormField> $fields, ?string $pdfHref = nullDeleguje do XfdfWriter::fromFieldsstring (XFDF XML)Wygodna ścieżka eksportu jednym wywołaniem.
FormDataExtractor::extractNonEmptylist<FormField> $fieldsPomija pola, których wartość jest pustym łańcuchemXfdfData
FormDataExtractor::getEmptyFieldNameslist<FormField> $fieldsWypisuje nazwy pól bez ustawionej wartościlist<string>Dopełnienie extractNonEmpty.
XfdfWriter::fromFieldslist<FormField> $fields, ?string $pdfHref = nullZbiera pary nazwa-wartość, deleguje do fromArraystring (XFDF XML)
XfdfWriter::fromArrayarray<string, string> $data, ?string $pdfHref = nullOpakowuje mapę w XfdfData, delegujestring (XFDF XML)
XfdfWriter::fromXfdfDataXfdfData $data, ?string $pdfHref = nullSerializuje do XFDF; nazwy w notacji z kropkami zagnieżdżają się jako hierarchiczne elementy <field>string (XFDF XML)Usuwa znaki sterujące niedozwolone w XML 1.0; zob. kontrakt zachowania.
XfdfParser::parsestring $xfdfXmlŁaduje XML w sposób odporny na XXE i spłaszcza pola do notacji z kropkamiXfdfDataInvalidArgumentExceptionLimit wejścia 10 MiB; akceptuje korzenie z przestrzenią nazw i bez niej.
XfdfParser::parseFilestring $filePathRozwiązuje ścieżkę, odczytuje plik, deleguje do parseXfdfDataInvalidArgumentExceptionBrakujące, nie będące plikiem lub nieczytelne ścieżki powodują wyjątek.
XfaParser::parsestring $pdfDataSprawdzenie markera, ekstrakcja XML, parsowanie pakietówXfaFormDataInvalidArgumentException, XfaParseExceptionBrak markera /XFA zwraca pusty wynik, a nie błąd.
XfaParser::hasXfastring $pdfDataSkanuje bajty w poszukiwaniu markera /XFAboolSkan markera bajtowego; dopasowuje każde wystąpienie tokena.
XfaParser::extractXfaXmlstring $pdfDataSkan strumieni pod kątem markerów XFA, następnie bezpośrednie wyszukiwanie <xdp:xdp>string (XFA XML lub '')RuntimeException (zadeklarowany)Skanuje najwyżej pierwsze 50 MiB danych wejściowych.
XfaParser::parseXmlstring $xmlWyodrębnia pakiety template i datasets, parsuje elementy <field>XfaFormDataXfaParseExceptionLimit XML 10 MiB, egzekwowany przed załadowaniem DOM.
FormDataBinder::bindlist<FormField> $fields, XfdfData $dataTworzy nowe instancje FormField z powiązanymi wartościamiFormDataBindResultOryginały nigdy nie są modyfikowane; pola wyboru normalizują się do Yes/Off.
FormDataBinder::fromXfdflist<FormField> $fields, string $xfdfXmlParsuje XFDF, następnie wiążeFormDataBindResultInvalidArgumentExceptionTryby awarii są takie jak w XfdfParser::parse.
FormDataBinder::fromArraylist<FormField> $fields, array<string, string> $dataOpakowuje mapę w XfdfData, następnie wiążeFormDataBindResult
FormDataBindResultisFullyBound, hasNoUnmatchedKeys, boundCount, fieldCount; readonly fields, boundFieldNames, unmatchedDataKeys, unboundFieldNamesNiezmienne diagnostyki wiązaniazależnie od metodyisFullyBound wymaga zera niedopasowanych kluczy i zera niepowiązanych pól.
XfdfDatahasField, getValue, count, isEmpty, getFieldNames, withField, withoutField, merge; readonly fieldsNiezmienny kontener nazwa-wartośćzależnie od metodywith* i merge zwracają nowe instancje; merge preferuje wartości argumentu.
XfaFormDatagetField, hasField, count, fieldNames; readonly fields, templateXml, datasetsXmlNiezmienny wynik parsowania XFAzależnie od metodyPrzenosi surowy XML pakietów template i datasets do pełnej wymiany dwustronnej.
XfaFormFieldreadonly name, type, value, required, caption, optionsNiezmienny rekord pojedynczego polatype przyjmuje jedną z wartości: text, numeric, date, choice, button, signature.
XfaPacketprzypadki enum Template, Datasets, Config, LocaleSet, ConnectionSet, Form; xmlNamespace()Wyliczenie pakietów oparte na łańcuchachstring z xmlNamespace()Identyfikatory URI przestrzeni nazw są zgodne z XFA Specification 3.3.
public static function extract(array $fields): XfdfData
public static function toArray(array $fields): array
public static function toXfdf(array $fields, ?string $pdfHref = null): string
public static function extractNonEmpty(array $fields): XfdfData
public static function getEmptyFieldNames(array $fields): array
public static function fromFields(array $fields, ?string $pdfHref = null): string
public static function fromArray(array $data, ?string $pdfHref = null): string
public static function fromXfdfData(XfdfData $data, ?string $pdfHref = null): string
public static function parse(string $xfdfXml): XfdfData
public static function parseFile(string $filePath): XfdfData
public function parse(string $pdfData): XfaFormData
public function hasXfa(string $pdfData): bool
public function extractXfaXml(string $pdfData): string
public function parseXml(string $xml): XfaFormData
public static function bind(array $fields, XfdfData $data): FormDataBindResult
public static function fromXfdf(array $fields, string $xfdfXml): FormDataBindResult
public static function fromArray(array $fields, array $data): FormDataBindResult
  • NextPDF\Pro\Form\Exception\XfaParseException rozszerza RuntimeException — ładunek XFA nie może zostać sparsowany do XfaFormData. Dziedziczenie jest celowe: istniejące miejsca wywołań catch (RuntimeException $e) nadal działają.
  • SPL InvalidArgumentException — puste, zbyt duże, zniekształcone lub nie-XFDF dane wejściowe dla XfdfParser; puste dane PDF dla XfaParser::parse; nieczytelne ścieżki w XfdfParser::parseFile.

Ekstrakcja AcroForm. FormDataExtractor przechodzi po przekazanej liście pól i odczytuje nazwę oraz wartość każdego pola. extract zwraca XfdfData; toArray zwraca zwykłą mapę łańcuchów nazwa-wartość. extractNonEmpty pomija pola, których wartość jest pustym łańcuchem; getEmptyFieldNames zwraca dopełniającą listę nazw. Ekstrakcja nigdy nie modyfikuje pól wejściowych.

Zapis XFDF. XfdfWriter produkuje dokument zgodny ze strukturą ISO 19444-1:2019. Wynik zaczyna się deklaracją XML XFDF oraz korzeniem xfdf w przestrzeni nazw Adobe XFDF (http://ns.adobe.com/xfdf/) z xml:space="preserve". Niepusty pdfHref emituje odniesienie <f href="..."/> z powrotem do źródłowego PDF. Nazwy pól w notacji z kropkami (na przykład address.city) zagnieżdżają się w hierarchiczne drzewo elementów <field>. Wartości i atrybuty escapują pięć metaznaków XML. Nazwy pól, wartości oraz pdfHref są dodatkowo normalizowane pod kątem poprawności składniowej: znaki sterujące C0, których zabrania XML 1.0, są usuwane, natomiast TAB, LF i CR są zachowywane. Ta normalizacja jest z założenia stratna, więc writer zawsze emituje poprawny składniowo, ponownie parsowalny XFDF, niezależnie od bajtów dostarczonych przez wywołującego.

Odczyt XFDF. XfdfParser akceptuje korzenie xfdf zarówno z przestrzenią nazw, jak i bez niej, oraz dopasowuje nazwę korzenia bez rozróżniania wielkości liter, ponieważ niektóre generatory emitują korzeń zapisany wielkimi literami. Hierarchiczne drzewa <field> spłaszczają się z powrotem do nazw w notacji z kropkami, dzięki czemu zapis i odczyt tworzą pełną wymianę dwustronną. Całe ładowanie XML wyłącza dostęp sieciowy i rozwiązywanie encji zewnętrznych. parseFile dodaje rozwiązywanie ścieżki i sprawdzanie czytelności przed tym samym parsowaniem.

Wiązanie danych. FormDataBinder::bind dopasowuje klucze danych do nazw pól. Ponieważ FormField jest niezmienny, wiązanie tworzy nowe instancje z zaktualizowanymi wartościami; oryginały nigdy nie są modyfikowane. Wynik raportuje trzy zbiory diagnostyczne: nazwy powiązanych pól, klucze danych bez pasującego pola oraz pola, które nie otrzymały danych. Wartości pól wyboru normalizują się do modelu stanu włączony/wyłączony z ISO 32000-2:2020, 12.7.5.2.3: yes, true, 1 i on (bez rozróżniania wielkości liter) mapują się na Yes; każda inna wartość mapuje się na Off.

Ekstrakcja danych XFA. XfaParser::parse przyjmuje surowe bajty PDF. Najpierw skanuje w poszukiwaniu markera /XFA; przy jego braku zwraca pusty XfaFormData. Ekstrakcja próbuje następnie dwóch strategii: skanu bloków streamendstream pod kątem wskaźników XFA XML, a następnie bezpośredniego wyszukiwania dokumentu <xdp:xdp>. Pojedynczy fragment xdp:xdp jest zwracany bez zmian; wiele fragmentów jest łączonych w syntetyzowaną kopertę xdp:xdp. parseXml wyodrębnia pakiety template i datasets oraz parsuje każdy element <field> szablonu do XfaFormField: atrybut name jest wymagany, typ wynika z elementu podrzędnego UI pola, flaga required wynika z elementu validate z nullTest ustawionym na error, a opcje wyboru pochodzą z elementów podrzędnych items.

Obsługa XFA jest zorientowana na dane. Parser strukturyzuje pakiety template i datasets. Nie wykonuje skryptów obliczeniowych XFA, nie renderuje dynamicznych układów XFA ani nie realizuje pełnej wymiany dwustronnej każdego typu pakietu. Zwaliduj parser względem swojego konkretnego zestawu dokumentów, zanim zaczniesz na nim polegać.

  • XfdfParser::parse('') zgłasza InvalidArgumentException. Wejście powyżej 10 MiB zgłasza InvalidArgumentException z podaniem limitu.
  • Zniekształcony XML zgłasza InvalidArgumentException z zebranymi komunikatami libxml. Poprawny składniowo dokument, którego korzeniem nie jest xfdf, zgłasza wyjątek i podaje rzeczywisty element korzenia.
  • Dokument XFDF bez elementu <fields> parsuje się do pustego XfdfData; nie jest to błąd.
  • Elementy pól bez atrybutu name są pomijane zarówno w parsowaniu XFDF, jak i XFA. Pole XFDF bez elementu podrzędnego <value> nie wnosi żadnego wpisu.
  • XfaParser::parse('') zgłasza InvalidArgumentException. PDF bez markera /XFA lub taki, którego XFA XML nie da się zlokalizować, zwraca pusty XfaFormData zamiast zgłaszać wyjątek.
  • hasXfa to skan markera bajtowego: dopasowuje każdy token /XFA w pliku, w tym w nieużywanym obiekcie. Kolejny krok ekstrakcji decyduje, czy istnieje użyteczny XML.
  • Ekstrakcja XFA bada najwyżej pierwsze 50 MiB łańcucha bajtów PDF; treść poza tą granicą nie jest skanowana.
  • XFA XML powyżej 10 MiB zgłasza XfaParseException, zanim jakiekolwiek drzewo DOM zostanie zmaterializowane. Zniekształcony XFA XML zgłasza XfaParseException z komunikatami libxml.
  • Normalizacja pól wyboru nigdy nie przepuszcza nierozpoznanych wartości; wszystko poza akceptowanymi formami stanu włączonego mapuje się na Off.
  • Usuwanie znaków sterujących przez writer jest stratne: bajty C0 niedozwolone w XML 1.0 w nazwach, wartościach lub pdfHref są odrzucane, aby wynik pozostał poprawny składniowo. TAB, LF i CR zostają zachowane.
  • Całe parsowanie XML wyłącza rozwiązywanie encji zewnętrznych i dostęp sieciowy (odporne na XXE).
  • Ten moduł nie wykonuje żadnych operacji kryptograficznych; tryb FIPS nie zmienia jego zachowania.
ZachowanieOdniesienieStatus
Model formularza interaktywnego / słownika pólISO 32000-2:2020, 12.7Zgodne (oparte na produkcie)
Normalizacja stanu włączony/wyłączony pola wyboru (Yes/Off)ISO 32000-2:2020, 12.7.5.2.3Zgodne; klauzula przytoczona w rekordzie cytowań tej strony
Struktura wymiany danych XFDFISO 19444-1:2019Zgodne (oparte na produkcie)
Nazwy pakietów XFA i identyfikatory URI przestrzeni nazwXFA Specification 3.3Zgodne (oparte na produkcie)

Korpus RAG dostępny w czasie tworzenia tej strony nie obejmuje ISO 19444-1:2019, specyfikacji XFA ani W3C XML 1.0, więc te stwierdzenia o zgodności są oparte na produkcie — na adnotacjach źródłowych i testach — a nie przytaczane z klauzul. Stwierdzenia te opisują funkcjonalność względem przywoływanych dokumentów. NextPDF nie posiada żadnej certyfikacji zgodności, a obsługa danej klauzuli nie jest oświadczeniem o certyfikacji.

  • Każdy punkt wejścia z wyjątkiem XfaParser jest statyczny. XfaParser jest instancjonowalny i bezstanowy; jedną instancję można bezpiecznie używać ponownie w wielu dokumentach.
  • Zamierzona wymiana dwustronna wygląda tak: czytnik formularzy Core wytwarza wartości FormField; FormDataExtractor lub XfdfWriter je serializuje; XfdfParser odczytuje dane z powrotem; FormDataBinder stosuje je do listy pól. Nazwy hierarchiczne przetrwają wymianę dwustronną dzięki notacji z kropkami.
  • Użyj diagnostyk FormDataBindResult (isFullyBound, unmatchedDataKeys, unboundFieldNames), aby wykryć rozbieżność między plikiem danych XFDF a zmienionym szablonem PDF, zanim zaakceptujesz wypełnienie.
  • XfdfData to obiekt wartości: withField, withoutField i merge zwracają nowe instancje. Przy kolizjach kluczy merge preferuje wartości argumentu.
  • XfaFormData zachowuje surowy XML pakietów template i datasets (templateXml, datasetsXml), dzięki czemu można poddać dalszej obróbce pakiety, których model pól nie obejmuje.
  • Ten moduł sam nie parsuje słowników AcroForm z bajtów PDF; konsumuje pola wytworzone przez czytnik formularzy Core. Tylko XfaParser operuje na surowej treści PDF.

Ta strona dokumentuje wyłącznie zachowanie obserwowalne z zewnątrz oraz wspieraną powierzchnię publicznego API. Wewnętrzne ścieżki przestrzeni nazw, klasy pomocnicze, tabele mechanizmów, nazwy plików runbooków oraz prefiksy zgłoszeń są poza zakresem.