Lewati ke konten
getnextpdf.com

Pro edisi

Form — Referensi Mendalam

Halaman ini adalah referensi mendalam untuk modul Pro Form. Halaman ini mencakup ekstraksi nilai AcroForm, baca dan tulis XFDF, pengikatan data, dan ekstraksi data XFA. Modul ini mengonsumsi nilai NextPDF\Form\FormField yang dihasilkan oleh Core form reader dan menambahkan serialisasi, penguraian, dan pengikatan di atasnya. Dukungan XFA berorientasi data: parser menstrukturkan paket template dan datasets. Ia tidak mengeksekusi skrip kalkulasi XFA atau merender tata letak XFA dinamis.

Kapabilitas ini disertakan dalam NextPDF Pro (nextpdf/pro) dan aktif dengan envelope lisensi tier-Pro. Deployment tanpa entitlement tersebut tidak memuat class kapabilitas ini. Bandingkan edisi dan dapatkan lisensi.

Tidak ada flag lisensi per-fitur. Ini adalah kapabilitas edisi Pro.

SimbolParameterPerilaku defaultMengembalikanMelempar atau gagal denganCatatan
FormDataExtractor::extractlist<FormField> $fieldsMembaca nama dan nilai setiap bidangXfdfDataMenyertakan bidang yang nilainya kosong.
FormDataExtractor::toArraylist<FormField> $fieldsMembangun map string nama-ke-nilaiarray<string, string>Nama duplikat berikutnya menimpa yang sebelumnya.
FormDataExtractor::toXfdflist<FormField> $fields, ?string $pdfHref = nullMendelegasikan ke XfdfWriter::fromFieldsstring (XFDF XML)Jalur praktis untuk ekspor satu panggilan.
FormDataExtractor::extractNonEmptylist<FormField> $fieldsMelewati bidang yang nilainya string kosongXfdfData
FormDataExtractor::getEmptyFieldNameslist<FormField> $fieldsMendaftar nama bidang yang tidak memiliki nilailist<string>Komplemen dari extractNonEmpty.
XfdfWriter::fromFieldslist<FormField> $fields, ?string $pdfHref = nullMengumpulkan pasangan nama-ke-nilai, mendelegasikan ke fromArraystring (XFDF XML)
XfdfWriter::fromArrayarray<string, string> $data, ?string $pdfHref = nullMembungkus map dalam XfdfData, mendelegasikanstring (XFDF XML)
XfdfWriter::fromXfdfDataXfdfData $data, ?string $pdfHref = nullMenserialisasi ke XFDF; nama notasi-titik bersarang sebagai elemen <field> hierarkisstring (XFDF XML)Menghapus karakter kontrol yang ilegal menurut XML 1.0; lihat kontrak perilaku.
XfdfParser::parsestring $xfdfXmlMemuat XML secara aman-XXE dan meratakan bidang ke notasi titikXfdfDataInvalidArgumentExceptionPagu masukan 10 MiB; menerima root ber-namespace dan tanpa namespace.
XfdfParser::parseFilestring $filePathMenyelesaikan path, membaca berkas, mendelegasikan ke parseXfdfDataInvalidArgumentExceptionPath yang hilang, bukan berkas, atau tidak terbaca memunculkan eksepsi.
XfaParser::parsestring $pdfDataPemeriksaan marker, ekstraksi XML, penguraian paketXfaFormDataInvalidArgumentException, XfaParseExceptionTanpa marker /XFA mengembalikan hasil kosong, bukan error.
XfaParser::hasXfastring $pdfDataMemindai byte untuk marker /XFAboolPemindaian marker byte; kemunculan token apa pun cocok.
XfaParser::extractXfaXmlstring $pdfDataPemindaian stream untuk marker XFA, lalu pencarian <xdp:xdp> langsungstring (XFA XML atau '')RuntimeException (dideklarasikan)Memindai paling banyak 50 MiB pertama dari masukan.
XfaParser::parseXmlstring $xmlMengekstrak paket template dan datasets, mengurai elemen <field>XfaFormDataXfaParseExceptionPagu XML 10 MiB, ditegakkan sebelum pemuatan DOM.
FormDataBinder::bindlist<FormField> $fields, XfdfData $dataMembuat instance FormField baru dengan nilai yang terikatFormDataBindResultAsli tidak pernah diubah; check box dinormalisasi menjadi Yes/Off.
FormDataBinder::fromXfdflist<FormField> $fields, string $xfdfXmlMengurai XFDF, lalu mengikatFormDataBindResultInvalidArgumentExceptionMode kegagalan sama seperti XfdfParser::parse.
FormDataBinder::fromArraylist<FormField> $fields, array<string, string> $dataMembungkus map dalam XfdfData, lalu mengikatFormDataBindResult
FormDataBindResultisFullyBound, hasNoUnmatchedKeys, boundCount, fieldCount; readonly fields, boundFieldNames, unmatchedDataKeys, unboundFieldNamesDiagnostik pengikatan yang immutableper metodeisFullyBound memerlukan nol kunci yang tak cocok dan nol bidang yang tak terikat.
XfdfDatahasField, getValue, count, isEmpty, getFieldNames, withField, withoutField, merge; readonly fieldsKontainer nama-ke-nilai yang immutableper metodewith* dan merge mengembalikan instance baru; merge mengutamakan nilai dari argumen.
XfaFormDatagetField, hasField, count, fieldNames; readonly fields, templateXml, datasetsXmlHasil penguraian XFA yang immutableper metodeMembawa XML paket template dan datasets mentah untuk round-trip.
XfaFormFieldreadonly name, type, value, required, caption, optionsRekaman satu-bidang yang immutabletype adalah salah satu dari text, numeric, date, choice, button, signature.
XfaPacketkasus enum Template, Datasets, Config, LocaleSet, ConnectionSet, Form; xmlNamespace()Enumerasi paket berbasis stringstring dari xmlNamespace()URI namespace mengikuti 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 memperluas RuntimeException — payload XFA tidak dapat diurai menjadi sebuah XfaFormData. Subclassing ini disengaja: call site catch (RuntimeException $e) yang sudah ada tetap bekerja.
  • SPL InvalidArgumentException — masukan yang kosong, terlalu besar, cacat, atau bukan-XFDF ke XfdfParser; masukan PDF kosong ke XfaParser::parse; path yang tidak terbaca di XfdfParser::parseFile.

Ekstraksi AcroForm. FormDataExtractor menelusuri daftar bidang yang Anda berikan dan membaca nama serta nilai setiap bidang. extract mengembalikan sebuah XfdfData; toArray mengembalikan map string nama-ke-nilai biasa. extractNonEmpty membuang bidang yang nilainya string kosong; getEmptyFieldNames mengembalikan daftar nama komplementernya. Ekstraksi tidak pernah mengubah bidang masukan.

Penulisan XFDF. XfdfWriter menghasilkan sebuah dokumen yang sesuai dengan struktur ISO 19444-1:2019. Keluaran diawali dengan deklarasi XML XFDF dan sebuah root xfdf dalam namespace XFDF Adobe (http://ns.adobe.com/xfdf/) dengan xml:space="preserve". pdfHref yang non-null memancarkan sebuah referensi <f href="..."/> kembali ke PDF sumber. Nama bidang notasi-titik (misalnya address.city) bersarang menjadi pohon elemen <field> hierarkis. Nilai dan atribut meng-escape kelima metakarakter XML. Nama bidang, nilai, dan pdfHref selanjutnya dinormalisasi agar well-formed: karakter kontrol C0 yang dilarang XML 1.0 dihapus, sementara TAB, LF, dan CR dipertahankan. Normalisasi ini bersifat lossy secara desain, sehingga writer selalu memancarkan XFDF yang well-formed dan dapat diurai ulang terlepas dari byte yang diberikan pemanggil.

Pembacaan XFDF. XfdfParser menerima root xfdf baik yang ber-namespace maupun tanpa namespace dan mencocokkan nama root secara tidak peka huruf besar-kecil, karena beberapa produser memancarkan elemen root huruf besar. Pohon <field> hierarkis diratakan kembali menjadi nama notasi-titik, sehingga penulisan dan pembacaan round-trip. Semua pemuatan XML menonaktifkan akses jaringan dan resolusi entitas eksternal. parseFile menambahkan penyelesaian path dan pemeriksaan keterbacaan di depan penguraian yang sama.

Pengikatan data. FormDataBinder::bind mencocokkan kunci data terhadap nama bidang. Karena FormField bersifat immutable, pengikatan membuat instance baru dengan nilai yang diperbarui; asli tidak pernah diubah. Hasilnya melaporkan tiga set diagnostik: nama bidang yang terikat, kunci data tanpa bidang yang cocok, dan bidang yang tidak menerima data. Nilai check-box dinormalisasi ke model status on/off dari ISO 32000-2:2020, 12.7.5.2.3: yes, true, 1, dan on (tidak peka huruf besar-kecil) dipetakan ke Yes; setiap nilai lain dipetakan ke Off.

Ekstraksi data XFA. XfaParser::parse menerima byte PDF mentah. Ia pertama-tama memindai marker /XFA; tanpa marker tersebut ia mengembalikan XfaFormData kosong. Ekstraksi kemudian mencoba dua strategi: pemindaian blok streamendstream untuk indikator XFA XML, lalu pencarian langsung untuk dokumen <xdp:xdp>. Satu fragmen xdp:xdp dikembalikan apa adanya; beberapa fragmen digabungkan menjadi sebuah envelope xdp:xdp yang disintesis. parseXml mengekstrak paket template dan datasets dan mengurai setiap elemen <field> template menjadi sebuah XfaFormField: atribut name wajib, type diturunkan dari elemen anak UI bidang, flag required diturunkan dari elemen validate dengan nullTest disetel ke error, dan opsi choice berasal dari anak items.

Dukungan XFA berorientasi data. Parser menstrukturkan paket template dan datasets. Ia tidak mengeksekusi skrip kalkulasi XFA, merender tata letak XFA dinamis, atau me-round-trip setiap jenis paket. Validasi parser terhadap set dokumen spesifik Anda sebelum mengandalkannya.

  • XfdfParser::parse('') melempar InvalidArgumentException. Masukan di atas 10 MiB melempar InvalidArgumentException yang menyebutkan pagu tersebut.
  • XML yang cacat melempar InvalidArgumentException yang membawa pesan libxml yang terkumpul. Dokumen yang well-formed tetapi root-nya bukan xfdf melempar eksepsi dan menyebutkan elemen root yang sebenarnya.
  • Dokumen XFDF tanpa elemen <fields> terurai menjadi XfdfData kosong; itu bukan error.
  • Elemen bidang tanpa atribut name dilewati baik dalam penguraian XFDF maupun XFA. Bidang XFDF tanpa anak <value> tidak menyumbang entri.
  • XfaParser::parse('') melempar InvalidArgumentException. PDF tanpa marker /XFA, atau yang XFA XML-nya tidak dapat ditemukan, mengembalikan XfaFormData kosong alih-alih melempar eksepsi.
  • hasXfa adalah pemindaian marker byte: token /XFA apa pun dalam berkas cocok, termasuk yang ada di objek yang tidak terpakai. Langkah ekstraksi berikutnya yang memutuskan apakah XML yang dapat digunakan ada.
  • Ekstraksi XFA memeriksa paling banyak 50 MiB pertama dari string byte PDF; konten di luar batas itu tidak dipindai.
  • XFA XML di atas 10 MiB melempar XfaParseException sebelum pohon DOM apa pun terwujud. XFA XML yang cacat melempar XfaParseException dengan pesan libxml.
  • Normalisasi check-box tidak pernah meneruskan nilai yang tak dikenali; apa pun di luar bentuk-on yang diterima dipetakan ke Off.
  • Penghapusan karakter kontrol oleh writer bersifat lossy: byte C0 yang ilegal menurut XML 1.0 dalam nama, nilai, atau pdfHref dibuang agar keluaran tetap well-formed. TAB, LF, dan CR bertahan.
  • Semua penguraian XML menonaktifkan resolusi entitas eksternal dan akses jaringan (aman-XXE).
  • Modul ini tidak melakukan operasi kriptografis; mode FIPS tidak mengubah perilakunya.
PerilakuReferensiStatus
Model formulir interaktif / dictionary bidangISO 32000-2:2020, 12.7Selaras (berdasar produk)
Normalisasi status on/off check-box (Yes/Off)ISO 32000-2:2020, 12.7.5.2.3Selaras; klausa dikutip dalam catatan sitasi halaman ini
Struktur pertukaran data XFDFISO 19444-1:2019Selaras (berdasar produk)
Nama paket XFA dan URI namespaceXFA Specification 3.3Selaras (berdasar produk)

Korpus RAG yang tersedia pada saat penulisan tidak mencakup ISO 19444-1:2019, XFA Specification, atau W3C XML 1.0, sehingga pernyataan keselarasan tersebut berdasar produk dari anotasi sumber dan pengujian, bukan dikutip per klausa. Pernyataan-pernyataan ini menggambarkan kapabilitas terhadap dokumen yang dirujuk. NextPDF tidak memegang sertifikasi kesesuaian, dan dukungan terhadap suatu klausa bukanlah klaim sertifikasi.

  • Setiap entry point kecuali XfaParser bersifat static. XfaParser dapat diinstansiasi dan stateless; satu instance aman digunakan ulang lintas dokumen.
  • Round-trip yang dimaksudkan adalah: Core form reader menghasilkan nilai FormField; FormDataExtractor atau XfdfWriter menserialisasinya; XfdfParser membaca data kembali; FormDataBinder menerapkannya ke daftar bidang. Nama hierarkis bertahan melewati round-trip melalui notasi titik.
  • Gunakan diagnostik FormDataBindResult (isFullyBound, unmatchedDataKeys, unboundFieldNames) untuk mendeteksi drift antara berkas data XFDF dan template PDF yang direvisi sebelum menerima pengisian.
  • XfdfData adalah value object: withField, withoutField, dan merge mengembalikan instance baru. Pada tabrakan kunci, merge mengutamakan nilai dari argumen.
  • XfaFormData menyimpan XML paket template dan datasets mentah (templateXml, datasetsXml) sehingga Anda dapat memproses lebih lanjut paket yang tidak dicakup model bidang.
  • Modul ini tidak mengurai dictionary AcroForm dari byte PDF sendiri; ia mengonsumsi bidang yang dihasilkan Core form reader. Hanya XfaParser yang beroperasi pada konten PDF mentah.

Halaman ini mendokumentasikan hanya perilaku yang dapat diamati secara eksternal dan permukaan API publik yang didukung. Path namespace internal, class helper, tabel mekanisme, nama berkas runbook, dan prefiks tiket berada di luar cakupan.