Lewati ke konten
getnextpdf.com

Pro edisi

Interop — Referensi Mendalam

Halaman ini adalah referensi tingkat kontrak untuk NextPDF\Pro\Interop\V1. Modul ini berisi empat belas simbol publik: satu kontrak serialisasi (InteropResultInterface), satu penjaga integritas CI (SchemaLock), tiga DTO hasil tingkat atas (ExtractedText, DocumentSegmentation, FormData), serta sembilan value object dan enum pendukung. Setiap DTO adalah tampilan imutabel dan JSON-serializable dari satu hasil analisis. Bentuk wire-nya berversi dan terkunci; tidak ada satu pun pada permukaan ini yang menjalankan ulang analisis. Tampilan berorientasi-tugas tersedia di halaman kapabilitas.

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

Tidak ada flag kapabilitas runtime yang menggerbang modul ini. Kelas-kelas tersedia setiap kali nextpdf/pro terpasang dan berlisensi.

SymbolParameterPerilaku defaultMengembalikanMelempar atau gagal denganCatatan
InteropResultInterfaceKontrak untuk DTO hasil tingkat atas; memperluas JsonSerializableTidak melemparSCHEMA_VERSION adalah string '1.0'.
InteropResultInterface::toArray()noneMenserialisasi ke array JSON-safe yang selalu membawa schema_versionarray<string, mixed>Tidak melemparImplementasi juga memancarkan discriminator type.
InteropResultInterface::toJson()int $flags = 0Mengenkode keluaran toArray(); JSON_THROW_ON_ERROR selalu di-OR-kanstringJsonException pada data yang tidak dapat dienkodeBerikan flag seperti JSON_PRETTY_PRINT.
SchemaLock::verify()noneMeng-hash schema.json V1 di disk dan membandingkannya dengan SHA-256 terkunciboolTidak melemparfalse ketika berkas skema hilang, tidak terbaca, atau dimodifikasi.
SchemaLock::expectedHash()noneMengembalikan hash terkuncistringTidak melemparKeluaran diagnostik untuk triase kegagalan CI.
SchemaLock::actualHash()noneMengembalikan hash dari berkas skema saat inistringTidak melemparString sentinel FILE_NOT_FOUND / READ_FAILED menggantikan hash pada kegagalan I/O.
BoundingBoxfloat $x, float $y, float $width, float $heightBox imutabel dalam titik user-space PDF, origin di kiri-bawahTidak melempararea(), overlaps(), toArray(), fromArray().
DocumentInfoint $pageCount plus enam field metadata opsionalMetadata dokumen imutabelTidak melemparfromArray() menjaga tipe setiap field; field yang absen jatuh ke default.
PageInfoint $pageNumber, float $width, float $height, int $rotation = 0Metadata halaman imutabelTidak melemparisLandscape(); fromArray() mengoersi string numerik dan float.
ExtractedTextlist<ExtractedPage> $pages, DocumentInfo $documentInfo, float $processingTimeMs = 0.0Hasil ekstraksi teks seluruh dokumenJsonException dari toJson() sajapage(), totalBlockCount(), plainText(), fromArray().
ExtractedPagePageInfo $pageInfo, list<TextBlock> $textBlocksKontainer per-halaman berisi blok teks dalam urutan bacaTidak melemparplainText() menggabungkan konten blok dengan spasi tunggal.
TextBlockstring $content, BoundingBox $boundingBox, int $pageNumber, string $fontName = '', float $fontSize = 0.0Runtun teks kontigu yang terposisiTidak melemparNama dan ukuran font bersifat best-effort (font dominan dalam blok).
DocumentSegmentationlist<Segment> $segments, DocumentInfo $documentInfo, float $processingTimeMs = 0.0Hasil segmentasi yang sadar-tata-letakJsonException dari toJson() sajasegmentCount(), ofType(), onPage(), contentSegments(), fromArray().
SegmentSegmentType $type, string $content, BoundingBox $boundingBox, int $pageNumber, float $confidence = 1.0, list<Segment> $children = []Region halaman terklasifikasi; anak bersarang secara rekursifTidak melemparAmbang isHighConfidence() adalah 0.8; descendantCount() bersifat rekursif.
SegmentTypeenum berbasis stringDua belas kasus, heading hingga unknownTidak melemparisContent() dan isStructural() mempartisi kasus-kasusnya.
FormDatalist<FormField> $fields, DocumentInfo $documentInfo, float $processingTimeMs = 0.0Hasil ekstraksi formulir seluruh dokumenJsonException dari toJson() sajafield(), dataFields(), filledCount(), toKeyValueMap(), fromArray().
FormFieldstring $name, FormFieldType $type, plus enam field opsionalSatu field formulir terekstraksiTidak melemparisFilled() adalah value !== ''.
FormFieldTypeenum berbasis stringDelapan kasus, text hingga buttonTidak melemparisDataField() adalah false untuk button dan signature.
interface InteropResultInterface extends JsonSerializable
public const SCHEMA_VERSION = '1.0';
public function toArray(): array;
public function toJson(int $flags = 0): string;
final class SchemaLock
public static function verify(): bool
public static function expectedHash(): string
public static function actualHash(): string
final readonly class ExtractedText implements InteropResultInterface
public function __construct(
public array $pages,
public DocumentInfo $documentInfo,
public float $processingTimeMs = 0.0,
)
public function page(int $pageNumber): ?ExtractedPage
public function totalBlockCount(): int
public function plainText(): string
public static function fromArray(array $data): self
final readonly class DocumentSegmentation implements InteropResultInterface
public function __construct(
public array $segments,
public DocumentInfo $documentInfo,
public float $processingTimeMs = 0.0,
)
public function ofType(SegmentType $type): array
public function onPage(int $pageNumber): array
public function contentSegments(): array
public static function fromArray(array $data): self
final readonly class FormData implements InteropResultInterface
public function __construct(
public array $fields,
public DocumentInfo $documentInfo,
public float $processingTimeMs = 0.0,
)
public function field(string $name): ?FormField
public function dataFields(): array
public function toKeyValueMap(): array
public static function fromArray(array $data): self
  • Amplop berversi. Setiap DTO tingkat atas (ExtractedText, DocumentSegmentation, FormData) mengimplementasikan InteropResultInterface. Keluaran toArray()-nya selalu membawa schema_version ('1.0') dan discriminator type: extracted_text, document_segmentation, atau form_data.
  • Enkoding JSON. toJson() mendelegasikan ke json_encode dengan JSON_THROW_ON_ERROR di-OR-kan ke flag pemanggil. jsonSerialize() mendelegasikan ke toArray(), sehingga json_encode($dto) menghasilkan bentuk yang sama.
  • Serialisasi deterministik. Urutan dan bentuk kunci ditetapkan oleh DTO. Segment::toArray() menghilangkan kunci children ketika kosong; FormField::toArray() menghilangkan bounding_box ketika bernilai null. Konsumen harus memperlakukan kedua kunci sebagai opsional.
  • Round trip. Setiap DTO memaparkan fromArray() statis yang menerima objek JSON terdekode. Field dijaga-tipe pada batas antar-proses ini: nilai yang absen atau salah-tipe jatuh ke default terdokumentasi alih-alih melempar.
  • Fallback enum. String type yang tidak dikenali dipetakan ke SegmentType::Unknown di Segment::fromArray() dan ke FormFieldType::Text di FormField::fromArray().
  • Koordinat. Koordinat BoundingBox adalah unit user-space PDF (titik, 1/72 inci) dengan origin di sudut kiri-bawah halaman. Nomor halaman berbasis-satu di seluruhnya.
  • Penggabungan teks polos. ExtractedPage::plainText() menggabungkan konten blok dengan spasi tunggal. ExtractedText::plainText() menggabungkan halaman dengan baris kosong ("\n\n").
  • Kueri segmentasi. ofType(), onPage(), dan contentSegments() memfilter hanya segmen tingkat atas dan mengembalikan list yang diindeks-ulang. contentSegments() memilih tipe di mana SegmentType::isContent() bernilai true: heading, sub_heading, paragraph, table, list, code.
  • Kueri formulir. FormData::dataFields() dan toKeyValueMap() mengecualikan tipe field non-data (button, signature). filledCount() menghitung field yang nilainya berupa string non-kosong.
  • Kunci skema. SchemaLock::verify() membaca schema.json V1 yang disertakan dengan paket, menormalisasi CRLF ke LF, meng-hash dengan SHA-256, dan membandingkannya dengan konstanta terkunci dalam waktu konstan. CI menggunakannya untuk memblokir pergeseran skema diam-diam; nilai kunci hanya berubah dengan perubahan skema berversi yang disengaja.
  • Kebijakan versi. Permukaan V1 adalah kontrak publik eksplisit. Perubahan aditif menaikkan versi skema; perubahan yang memutus memerlukan versi mayor baru.
  • Satu-satunya anggota yang melempar pada permukaan ini adalah toJson(): JsonException ketika array tidak dapat dienkode, misalnya UTF-8 tidak valid dalam konten terekstraksi.
  • SchemaLock::verify() mengembalikan false — tidak pernah melempar — ketika berkas skema hilang, tidak terbaca, atau dimodifikasi. Bandingkan expectedHash() dengan actualHash() untuk membedakan pergeseran dari kegagalan I/O.
  • Fallback fromArray() bersifat diam-diam secara desain. page_number yang salah-tipe menjadi 1; confidence yang salah-tipe menjadi default. Validasi di hulu ketika default yang dibuat-buat tidak dapat diterima.
  • Koersi string numerik bersifat asimetris. PageInfo::fromArray() menerima string numerik untuk field int dan float-nya; Segment dan TextBlock hanya menerima int atau float untuk confidence dan font_size.
  • BoundingBox::fromArray() mensyaratkan keempat kunci sesuai bentuk array terdokumentasinya. DTO yang menyematkannya menggantikan box nol (atau null untuk FormField) ketika kunci pembungkusnya absen.
  • ExtractedPage::fromArray() menggantikan page_info fallback berupa halaman 1 pada 595 × 842 titik ketika kuncinya hilang atau salah-tipe.
  • FormField::fromArray() hanya menerima boolean ketat untuk required dan read_only; string truthy dan integer dipetakan ke false.
  • Anak Segment berekursi tanpa batas kedalaman. Penyarangan yang sangat dalam hanya dibatasi oleh batas memori dan stack PHP.
  • Tidak ada operasi kunci kriptografis atau tanda tangan yang terjadi dalam modul ini. SchemaLock menggunakan SHA-256 semata sebagai checksum integritas berkas, sehingga tidak ada perilaku khusus mode FIPS.

Interop V1 adalah kontrak wire berversi milik NextPDF. Ia tidak mengimplementasikan standar eksternal, sehingga tidak ada tabel sitasi normatif. Semantik BoundingBox selaras dengan model koordinat user-space PDF yang digunakan subsistem Core penghasil; itu adalah pernyataan keselarasan struktural, bukan hasil uji kesesuaian. NextPDF tidak memegang sertifikasi apa pun dan tidak memberikan apa pun.

  • Bercabang pada schema_version di konsumen. Perlakukan kunci aditif sebagai kompatibel; tolak versi mayor tak dikenal secara eksplisit.
  • Jalankan SchemaLock::verify() di CI. Pada kegagalan, catat expectedHash() dan actualHash() serta wajibkan perubahan skema berversi yang disengaja, tidak pernah suntingan di tempat.
  • Untuk round trip antar-proses, dekode dengan array asosiatif (json_decode($json, true)) dan umpankan hasilnya ke fromArray() yang cocok.
  • Semua DTO bersifat final dan readonly. Perluas melalui komposisi; turunkan tampilan baru dari field publik.
  • toKeyValueMap() meratakan hanya field pembawa-data. Baca field signature langsung dari FormData::$fields ketika keberadaannya penting.
  • Penggunaan-ulang aman: DTO tidak menyimpan state mutabel maupun resource, sehingga dapat di-cache, dibagi antar-permintaan, dan diserialisasi berulang kali.

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