Ga naar inhoud
getnextpdf.com

Pro editie

Form — Diepe referentie

Deze pagina is de diepe referentie voor de Pro Form-module. Ze behandelt AcroForm-waarde-extractie, XFDF lezen en schrijven, gegevensbinding en XFA-gegevensextractie. De module consumeert NextPDF\Form\FormField-waarden die door de Core form reader worden geproduceerd en voegt daar serialisatie, parsing en binding aan toe. XFA-ondersteuning is gegevensgericht: de parser structureert de template- en datasets-pakketten. Ze voert geen XFA-berekeningsscripts uit en rendert geen dynamische XFA-lay-outs.

Deze functionaliteit wordt geleverd in NextPDF Pro (nextpdf/pro) en wordt geactiveerd met een Pro-tier license envelope. Een deployment zonder die entitlement laadt de klassen van de functionaliteit niet. Vergelijk edities en vraag een licentie aan.

Er bestaat geen license-flag per functie. Dit is een functionaliteit van de Pro-editie.

SymboolParametersStandaardgedragRetourneertGooit of faalt metOpmerkingen
FormDataExtractor::extractlist<FormField> $fieldsLeest de naam en waarde van elk veldXfdfDataBevat velden met een lege waarde.
FormDataExtractor::toArraylist<FormField> $fieldsBouwt een name-to-value stringmaparray<string, string>Een latere dubbele naam overschrijft een eerdere.
FormDataExtractor::toXfdflist<FormField> $fields, ?string $pdfHref = nullDelegeert naar XfdfWriter::fromFieldsstring (XFDF XML)Handige route voor export in één aanroep.
FormDataExtractor::extractNonEmptylist<FormField> $fieldsSlaat velden over waarvan de waarde de lege string isXfdfData
FormDataExtractor::getEmptyFieldNameslist<FormField> $fieldsSomt de namen op van velden zonder ingestelde waardelist<string>Complement van extractNonEmpty.
XfdfWriter::fromFieldslist<FormField> $fields, ?string $pdfHref = nullVerzamelt name-to-value-paren, delegeert naar fromArraystring (XFDF XML)
XfdfWriter::fromArrayarray<string, string> $data, ?string $pdfHref = nullWikkelt de map in XfdfData, delegeertstring (XFDF XML)
XfdfWriter::fromXfdfDataXfdfData $data, ?string $pdfHref = nullSerialiseert naar XFDF; dot-notatie-namen nesten als hiërarchische <field>-elementenstring (XFDF XML)Verwijdert XML-1.0-ongeldige control-tekens; zie het gedragscontract.
XfdfParser::parsestring $xfdfXmlLaadt de XML XXE-veilig en vlakt velden af tot dot-notatieXfdfDataInvalidArgumentExceptionInvoerplafond van 10 MiB; accepteert namespaced en niet-namespaced roots.
XfdfParser::parseFilestring $filePathResolvet het pad, leest het bestand, delegeert naar parseXfdfDataInvalidArgumentExceptionOntbrekende, niet-bestand- of onleesbare paden genereren een exception.
XfaParser::parsestring $pdfDataMarkercontrole, XML-extractie, pakketparsingXfaFormDataInvalidArgumentException, XfaParseExceptionGeen /XFA-marker retourneert een leeg resultaat, geen fout.
XfaParser::hasXfastring $pdfDataScant de bytes op de /XFA-markerboolByte-marker-scan; elk voorkomen van de token matcht.
XfaParser::extractXfaXmlstring $pdfDataStreamscan op XFA-markers, daarna directe zoektocht naar <xdp:xdp>string (XFA XML of '')RuntimeException (gedeclareerd)Scant hooguit de eerste 50 MiB van de invoer.
XfaParser::parseXmlstring $xmlExtraheert de template- en datasets-pakketten, parse’t <field>-elementenXfaFormDataXfaParseExceptionXML-plafond van 10 MiB, afgedwongen vóór het laden van de DOM.
FormDataBinder::bindlist<FormField> $fields, XfdfData $dataMaakt nieuwe FormField-instanties met gebonden waardenFormDataBindResultOriginelen worden nooit gewijzigd; checkboxes normaliseren naar Yes/Off.
FormDataBinder::fromXfdflist<FormField> $fields, string $xfdfXmlParse’t de XFDF, bindt vervolgensFormDataBindResultInvalidArgumentExceptionFaalmodi zijn die van XfdfParser::parse.
FormDataBinder::fromArraylist<FormField> $fields, array<string, string> $dataWikkelt de map in XfdfData, bindt vervolgensFormDataBindResult
FormDataBindResultisFullyBound, hasNoUnmatchedKeys, boundCount, fieldCount; readonly fields, boundFieldNames, unmatchedDataKeys, unboundFieldNamesOnveranderlijke bind-diagnostiekper methodeisFullyBound vereist nul niet-gematchte keys en nul ongebonden velden.
XfdfDatahasField, getValue, count, isEmpty, getFieldNames, withField, withoutField, merge; readonly fieldsOnveranderlijke name-to-value-containerper methodewith* en merge retourneren nieuwe instanties; merge verkiest de waarden van het argument.
XfaFormDatagetField, hasField, count, fieldNames; readonly fields, templateXml, datasetsXmlOnveranderlijk XFA-parseresultaatper methodeDraagt ruwe template- en datasets-pakket-XML voor round-tripping.
XfaFormFieldreadonly name, type, value, required, caption, optionsOnveranderlijk record van één veldtype is een van text, numeric, date, choice, button, signature.
XfaPacketenum-cases Template, Datasets, Config, LocaleSet, ConnectionSet, Form; xmlNamespace()String-backed pakket-enumeratiestring uit xmlNamespace()Namespace-URI’s volgen de 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 breidt RuntimeException uit — de XFA-payload kan niet tot een XfaFormData worden geparset. De subclassing is bewust: bestaande catch (RuntimeException $e)-call sites blijven werken.
  • SPL InvalidArgumentException — lege, te grote, misvormde of niet-XFDF-invoer voor XfdfParser; lege PDF-invoer voor XfaParser::parse; onleesbare paden in XfdfParser::parseFile.

AcroForm-extractie. FormDataExtractor doorloopt de veldlijst die je doorgeeft en leest de naam en waarde van elk veld. extract retourneert een XfdfData; toArray retourneert een gewone name-to-value stringmap. extractNonEmpty laat velden vallen waarvan de waarde de lege string is; getEmptyFieldNames retourneert de complementaire namenlijst. Extractie muteert de invoervelden nooit.

XFDF-schrijven. XfdfWriter produceert een document dat voldoet aan de structuur van ISO 19444-1:2019. De uitvoer begint met de XFDF-XML-declaratie en een xfdf-root in de Adobe XFDF-namespace (http://ns.adobe.com/xfdf/) met xml:space="preserve". Een niet-null pdfHref genereert een <f href="..."/>-referentie terug naar de bron-PDF. Dot-notatie-veldnamen (bijvoorbeeld address.city) nesten in een hiërarchische <field>-elementenboom. Waarden en attributen escapen de vijf XML-metatekens. Veldnamen, waarden en de pdfHref worden bovendien genormaliseerd voor welgevormdheid: de C0-control-tekens die XML 1.0 verbiedt worden verwijderd, terwijl TAB, LF en CR behouden blijven. Deze normalisatie is bewust lossy, dus de writer produceert altijd welgevormde, opnieuw parsebare XFDF, ongeacht de door de aanroeper aangeleverde bytes.

XFDF-lezen. XfdfParser accepteert zowel namespaced als niet-namespaced xfdf-roots en matcht de rootnaam hoofdletterongevoelig, omdat sommige producenten een root-element in hoofdletters genereren. Hiërarchische <field>-bomen worden weer platgevlakt tot dot-notatie-namen, zodat schrijven en lezen round-trippen. Alle XML-loading schakelt netwerktoegang en externe-entiteitresolutie uit. parseFile voegt padresolutie en leesbaarheidscontroles toe vóór dezelfde parse.

Gegevensbinding. FormDataBinder::bind matcht gegevens-keys tegen veldnamen. Omdat FormField onveranderlijk is, maakt binding nieuwe instanties met bijgewerkte waarden; de originelen worden nooit gewijzigd. Het resultaat rapporteert drie diagnostische sets: gebonden veldnamen, gegevens-keys zonder overeenkomend veld, en velden die geen gegevens ontvingen. Checkbox-waarden normaliseren naar het aan/uit-toestandsmodel van ISO 32000-2:2020, 12.7.5.2.3: hoofdletterongevoelig yes, true, 1 en on mappen naar Yes; elke andere waarde mapt naar Off.

XFA-gegevensextractie. XfaParser::parse accepteert ruwe PDF-bytes. Het scant eerst op de /XFA-marker; ontbreekt de marker, dan retourneert het een lege XfaFormData. De extractie probeert vervolgens twee strategieën: een scan van streamendstream-blokken op XFA-XML-indicatoren, daarna een directe zoektocht naar een <xdp:xdp>-document. Een enkel xdp:xdp-fragment wordt ongewijzigd geretourneerd; meerdere fragmenten worden samengevoegd tot een gesynthetiseerde xdp:xdp-envelop. parseXml extraheert de template- en datasets-pakketten en parse’t elk template-<field>-element tot een XfaFormField: het name-attribuut is verplicht, het type wordt afgeleid uit het UI-kindelement van het veld, de required-flag wordt afgeleid uit een validate-element met nullTest op error, en keuze-opties komen uit items-kinderen.

XFA-ondersteuning is gegevensgericht. De parser structureert de template- en datasets-pakketten. Het voert geen XFA-berekeningsscripts uit, rendert geen dynamische XFA-lay-outs en round-trippt niet elk pakkettype. Valideer de parser tegen je specifieke documentset voordat je erop vertrouwt.

  • XfdfParser::parse('') gooit InvalidArgumentException. Invoer boven 10 MiB gooit InvalidArgumentException met vermelding van het plafond.
  • Misvormde XML gooit InvalidArgumentException met de verzamelde libxml-meldingen. Een welgevormd document waarvan de root niet xfdf is, gooit en noemt het werkelijke root-element.
  • Een XFDF-document zonder <fields>-element parse’t tot een lege XfdfData; dat is geen fout.
  • Veldelementen zonder name-attribuut worden zowel bij XFDF- als XFA-parsing overgeslagen. Een XFDF-veld zonder <value>-kind draagt geen entry bij.
  • XfaParser::parse('') gooit InvalidArgumentException. Een PDF zonder de /XFA-marker, of een waarvan de XFA-XML niet kan worden gelokaliseerd, retourneert een lege XfaFormData in plaats van te gooien.
  • hasXfa is een byte-marker-scan: elke /XFA-token in het bestand matcht, ook een in een ongebruikt object. De daaropvolgende extractiestap bepaalt of er bruikbare XML bestaat.
  • XFA-extractie onderzoekt hooguit de eerste 50 MiB van de PDF-bytestring; inhoud voorbij die grens wordt niet gescand.
  • XFA-XML boven 10 MiB gooit XfaParseException voordat er een DOM-boom wordt gematerialiseerd. Misvormde XFA-XML gooit XfaParseException met de libxml-meldingen.
  • Checkbox-normalisatie laat nooit onherkende waarden door; alles buiten de geaccepteerde aan-vormen mapt naar Off.
  • Het verwijderen van control-tekens door de writer is lossy: XML-1.0-ongeldige C0-bytes in namen, waarden of de pdfHref worden weggelaten zodat de uitvoer welgevormd blijft. TAB, LF en CR overleven.
  • Alle XML-parsing schakelt externe-entiteitresolutie en netwerktoegang uit (XXE-veilig).
  • Deze module voert geen cryptografische bewerkingen uit; de FIPS-modus verandert het gedrag niet.
GedragReferentieStatus
Model voor interactief formulier / velddictionaryISO 32000-2:2020, 12.7Afgestemd (productgefundeerd)
Checkbox aan/uit-toestandnormalisatie (Yes/Off)ISO 32000-2:2020, 12.7.5.2.3Afgestemd; clausule geciteerd in het citatierecord van deze pagina
XFDF-gegevensuitwisselingsstructuurISO 19444-1:2019Afgestemd (productgefundeerd)
XFA-pakketnamen en namespace-URI’sXFA Specification 3.3Afgestemd (productgefundeerd)

Het RAG-corpus dat beschikbaar was tijdens het schrijven bevat ISO 19444-1:2019, de XFA Specification of W3C XML 1.0 niet, dus die afstemmingsverklaringen zijn productgefundeerd op basis van bronannotaties en tests in plaats van clausule-geciteerd. Deze verklaringen beschrijven functionaliteit ten opzichte van de genoemde documenten. NextPDF bezit geen conformiteitscertificering, en ondersteuning voor een clausule is geen certificeringsclaim.

  • Elk entry point behalve XfaParser is statisch. XfaParser is instantieerbaar en stateless; één instantie kan veilig over documenten heen worden hergebruikt.
  • De bedoelde round-trip is: de Core form reader produceert FormField-waarden; FormDataExtractor of XfdfWriter serialiseert ze; XfdfParser leest de gegevens weer in; FormDataBinder past ze toe op een veldlijst. Hiërarchische namen overleven de round-trip via dot-notatie.
  • Gebruik de FormDataBindResult-diagnostiek (isFullyBound, unmatchedDataKeys, unboundFieldNames) om drift tussen een XFDF-gegevensbestand en een herzien PDF-template te detecteren voordat je een invulling accepteert.
  • XfdfData is een waardeobject: withField, withoutField en merge retourneren nieuwe instanties. Bij key-botsingen verkiest merge de waarden van het argument.
  • XfaFormData behoudt de ruwe template- en datasets-pakket-XML (templateXml, datasetsXml) zodat je pakketten kunt nabewerken die het veldmodel niet dekt.
  • Deze module parse’t zelf geen AcroForm-dictionaries uit PDF-bytes; ze consumeert velden die door de Core form reader worden geproduceerd. Alleen XfaParser werkt op ruwe PDF-inhoud.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helper-klassen, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten de scope.