Kepatuhan: validator PDF/R-1, tata bahasa Arlington, dan alat siklus hidup
Sekilas pandang
Bagian berjudul “Sekilas pandang”NextPDF\Compliance menyediakan validator aliran byte dan pemeriksaan silang tata bahasa yang membaca berkas Portable Document Format (PDF) yang sudah selesai dibuat, lalu melaporkan bagian yang menyimpang dari kontrak normatif. Ketika sebuah validator mengembalikan nol temuan, hasil tersebut diperiksa terhadap klausa yang diimplementasikannya. Ini bukan sertifikat menyeluruh.
Instalasi
Bagian berjudul “Instalasi”composer require nextpdf/core:^3Tinjauan konseptual
Bagian berjudul “Tinjauan konseptual”Modul ini terdiri dari tiga bagian.
PdfRValidator memvalidasi aliran byte kandidat ISO 23504-1:2020 (PDF/R-1). Validator ini bekerja pada byte mentah, bukan pada keadaan internal penulis. Validator ini menangkap pergeseran antara keluaran yang dimaksudkan penulis dan persyaratan spesifikasi, sehingga menjadi pemeriksaan akhir. Kumpulan klausa yang diimplementasikan adalah klaster v5.1.0: komentar identifikasi versi §5, daftar izin header §6.2.2/§6.2.3, larangan generation-0 dan object-stream §6.2.4, daftar izin operator aliran konten §6.5.7 (hanya q, Q, cm, Do), daftar izin kunci image XObject §6.6.1, daftar izin kunci Info-dictionary §6.4.3, dan daftar izin kunci Catalog §6.3. Pembaruan inkremental §6.7 dan enkripsi §6.8 secara eksplisit berada di luar cakupan klaster awal dan dinyatakan demikian di claims.json. Validator ini tidak berhenti pada temuan pertama. Validator mengumpulkan setiap penyimpangan dalam satu lintasan sehingga Anda dapat melihat seluruh perbedaannya.
PdfRConformancePolicy adalah kebijakan immutable untuk area direkomendasikan-tetapi-informatif di sekitar PDF/R-1. Batas dasar normatif §6 tidak pernah dapat dikonfigurasi. Kebijakan ini hanya mengontrol rekomendasi batas implementasi §A.5, penghindaran multi-strip §6.6.1, dan persyaratan XMP Extensible Metadata Platform (XMP) §A.6 untuk reklasifikasi PDF/A hilir.
ArlingtonValidator menjalankan model Arlington PDF upstream dari PDF Association dalam mode laporan-saja. Untuk siklus saat ini, sifatnya penasihat: validateReportOnly() tidak pernah melempar pengecualian. Validator ini melakukan fallback melalui tiga mode. Ketika biner pemeriksa referensi tersedia, validator mengurai temuan terstruktur. Ketika hanya tata bahasa yang di-pin tersedia, validator mengeluarkan satu temuan info yang membuktikan bahwa pin tata bahasa telah dimuat. Ketika tata bahasa tidak tersedia, validator mengembalikan daftar kosong. Sebuah WaiverRegistry memungkinkan orchestrator menekan ketidaksepakatan yang diketahui dapat diterima sambil tetap mempertahankan jejak audit.
Aturan kejujuran ini selaras dengan matriks dukungan Cascading Style Sheets (CSS) dan modul konformansi. Klausa dinyatakan Verified hanya ketika ada pengujian yang lulus dan klausa normatifnya dikutip. Klausa yang diimplementasikan tetapi tidak memiliki fixture lulus khusus dinyatakan Claimed. Klausa di luar cakupan dinyatakan secara eksplisit. Klausa-klausa itu tidak dibiarkan ambigu. Hasil PdfRValidator tanpa temuan hanya menegaskan klausa yang diperiksanya. Validator ini tidak membuat klaim apa pun tentang §6.7 atau §6.8, yang tidak diimplementasikannya.
Permukaan API
Bagian berjudul “Permukaan API”| Tipe | Jenis | Anggota utama |
|---|---|---|
NextPDF\Compliance\Validator\PdfRValidator | final class | validate(string $pdfBytes): list<PdfRValidationFinding> |
NextPDF\Compliance\Validator\PdfRValidationFinding | final readonly class | string $clause, 'error'|'warning'|'info' $severity, string $message |
NextPDF\Compliance\Profile\PdfRConformancePolicy | final readonly class | __construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival() |
NextPDF\Compliance\Validator\ArlingtonValidator | final class | validateReportOnly(string $pdfPath): list<ArlingtonFinding> |
NextPDF\Compliance\Validator\WaiverRegistry | final class | isWaived(string $validator, string $ruleId, string $scopeKey): bool |
Contoh kode — Memulai cepat
Bagian berjudul “Contoh kode — Memulai cepat”<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\PdfRValidator;
$validator = new PdfRValidator();$findings = $validator->validate(file_get_contents('candidate.pdf'));
if ($findings === []) { // Zero divergences from the §6 clauses PdfRValidator implements. // This is NOT a PDF/R-1 certificate — §6.7 and §6.8 are not checked. echo "No PDF/R-1 §6 divergences detected (implemented clause set).\n";} else { foreach ($findings as $f) { echo "[{$f->severity}] §{$f->clause}: {$f->message}\n"; }}Contoh kode — Produksi
Bagian berjudul “Contoh kode — Produksi”<?php
declare(strict_types=1);
use NextPDF\Compliance\Validator\ArlingtonValidator;use NextPDF\Compliance\Validator\ArlingtonGrammarLoader;use NextPDF\Compliance\Validator\WaiverRegistry;
$validator = new ArlingtonValidator( waivers: new WaiverRegistry(/* loaded waiver entries */), grammar: new ArlingtonGrammarLoader(/* pinned submodule path */), adapter: null, // grammar-only mode when the reference checker is absent);
// Advisory by contract — never throws on findings.$findings = $validator->validateReportOnly('artifact.pdf');
foreach ($findings as $finding) { // Each finding pins the Arlington grammar commit SHA for provenance. logger()->info('arlington', [ 'rule' => $finding->ruleId, 'severity' => $finding->severity, 'grammarSha' => $finding->grammarSha, ]);}Kasus tepi & jebakan
Bagian berjudul “Kasus tepi & jebakan”PdfRValidatorberbasis regex, bukan parser lengkap. Validator ini menargetkan keluaran deterministik dariNextPDF\Writer\PdfRWriter. Gunakan validator ini sebagai pendeteksi pergeseran untuk penulis tersebut, bukan sebagai parser PDF umum.- Nol temuan ≠ konformansi PDF/R-1 penuh. §6.7 (pembaruan inkremental) dan §6.8 (enkripsi) tidak diimplementasikan dalam klaster v5.1.0 dan dinyatakan di luar cakupan di
claims.json. Anggap hasil bersih sebagai “tidak ada penyimpangan pada kumpulan klausa yang diimplementasikan”, dan tidak lebih dari itu. - Arlington bersifat penasihat. Dalam siklus saat ini,
validateReportOnly()tidak pernah menggagalkan build. Continuous integration (CI) mengonsumsi artefak tersebut, tetapi tidak menjadikannya gerbang. - Validasi International Color Consortium (ICC) PDF/A tidak ada di sini. Validasi ICC OutputIntent ISO 19005-4:2020 §6.2.2 berada di
PdfAManagerEnterprise (nextpdf/pro), bukan di modul Compliance Core. Permukaan PDF/A Core hanyalah diskriminatorConformanceMode. - Pengabaian mempertahankan jejak audit. Aturan yang diabaikan ditekan dari daftar temuan, tetapi entri pengabaian tetap menjadi catatan tentang alasannya.
Kinerja
Bagian berjudul “Kinerja”PdfRValidator::validate() berjalan dalam satu lintasan linear dengan penelusuran regex terbatas di atas aliran byte. Biayanya berskala mengikuti ukuran dokumen dan tetap jauh di dalam anggaran modul. Dalam mode tata-bahasa-saja, ArlingtonValidator bersifat O(grammar-rule-count) untuk temuan bukti-pemuatan. Jalur pemeriksa-referensi berjalan sebagai subproses dan dibatasi oleh alat upstream, bukan oleh NextPDF. Ini adalah langkah CI di luar jalur utama.
Catatan keamanan
Bagian berjudul “Catatan keamanan”Validator-validator ini membaca byte PDF yang tidak tepercaya. PdfRValidator melepas literal dalam tanda kurung dan literal heksadesimal sebelum ekstraksi kunci, sehingga string Creator yang dibuat khusus tidak dapat menyuntikkan kunci /Name palsu (penanganan escape ISO 32000-1:2008 §7.3.4.2). Adaptor Arlington menjalankan pemeriksa upstream sebagai subproses yang terbatas. Adaptor ini memperlakukan batas waktu atau galat eksekusi sebagai “tanpa temuan” alih-alih memercayai keluaran parsial. Lihat model ancaman proyek untuk permukaan serangan penguraian PDF.
Konformansi
Bagian berjudul “Konformansi”| Standar | Klausa | Apa yang dilakukan modul Compliance | Status |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator menegakkan daftar izin operator aliran konten {q,Q,cm,Do} | Verified (uji unit + profil-standar + integrasi lulus) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator menegakkan daftar izin kunci Info-dictionary | Verified (didukung pengujian) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7, §6.8 | Tidak diimplementasikan dalam klaster v5.1.0 | Di luar cakupan secara eksplisit (dinyatakan di claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Penelusuran daftar izin kunci Catalog | Claimed (penelusuran regex; struktural) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Kesadaran terhadap skema identifikasi melalui modul Conformance | Referensi silang (lihat /specifications/pdfa4/) |
Dukungan bukanlah konformansi. Eksekusi PdfRValidator yang tidak mengembalikan temuan hanya membuktikan bahwa input tidak menyimpang dari klausa §6 yang diimplementasikan validator. Ini tidak menegaskan bahwa berkas tersebut adalah berkas PDF/R-1 yang konforman: §6.7 dan §6.8 tidak diperiksa. Pemeriksaan silang Arlington bersifat penasihat dan tidak pernah menegaskan konformansi. Untuk PDF/A-4, veraPDF adalah validator otoritatif dan berjalan di luar jalur utama. Lihat modul conformance untuk oracle veraPDF dan gerbang keikutsertaannya.
Kutipan diparafrasekan dari korpus kepatuhan NextPDF. Digest reference_id 64 karakter lengkap dicatat dalam front-matter halaman dan di _normative-evidence-conf.md.
Lihat juga
Bagian berjudul “Lihat juga”- Modul Conformance — perutean
ConformanceModedan oracle veraPDF - Modul Audit — jejak audit dan permukaan atestasi
- Pemetaan spesifikasi PDF/A-4 — cakupan dan non-cakupan ISO 19005-4
- Modul Security — model ancaman penguraian PDF