Lewati ke konten

Kepatuhan: validator PDF/R-1, tata bahasa Arlington, dan alat siklus hidup

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.

Terminal window
composer require nextpdf/core:^3

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.

TipeJenisAnggota utama
NextPDF\Compliance\Validator\PdfRValidatorfinal classvalidate(string $pdfBytes): list<PdfRValidationFinding>
NextPDF\Compliance\Validator\PdfRValidationFindingfinal readonly classstring $clause, 'error'|'warning'|'info' $severity, string $message
NextPDF\Compliance\Profile\PdfRConformancePolicyfinal readonly class__construct(bool $enforceA5ImplementationLimits = true, bool $rejectMultiStripPages = false, bool $requireXmpForA6Compatibility = false); lax(), strictArchival()
NextPDF\Compliance\Validator\ArlingtonValidatorfinal classvalidateReportOnly(string $pdfPath): list<ArlingtonFinding>
NextPDF\Compliance\Validator\WaiverRegistryfinal classisWaived(string $validator, string $ruleId, string $scopeKey): bool
<?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";
}
}
<?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,
]);
}
  • PdfRValidator berbasis regex, bukan parser lengkap. Validator ini menargetkan keluaran deterministik dari NextPDF\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 PdfAManager Enterprise (nextpdf/pro), bukan di modul Compliance Core. Permukaan PDF/A Core hanyalah diskriminator ConformanceMode.
  • Pengabaian mempertahankan jejak audit. Aturan yang diabaikan ditekan dari daftar temuan, tetapi entri pengabaian tetap menjadi catatan tentang alasannya.

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.

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.

StandarKlausaApa yang dilakukan modul ComplianceStatus
ISO 23504-1:2020 (PDF/R-1)§6.5.7PdfRValidator 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.3PdfRValidator menegakkan daftar izin kunci Info-dictionaryVerified (didukung pengujian)
ISO 23504-1:2020 (PDF/R-1)§6.7, §6.8Tidak diimplementasikan dalam klaster v5.1.0Di luar cakupan secara eksplisit (dinyatakan di claims.json)
ISO 32000-2:2020 (PDF 2.0)§7.5.2Penelusuran daftar izin kunci CatalogClaimed (penelusuran regex; struktural)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Kesadaran terhadap skema identifikasi melalui modul ConformanceReferensi 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.