Compliance: PDF/R-1-validator, Arlington-grammatica en levenscyclus-hulpmiddelen
In een oogopslag
Sectie met titel “In een oogopslag”NextPDF\Compliance levert byte-stroomvalidators en een grammatica-kruiscontrole die een voltooid Portable Document Format (PDF)-bestand inlezen en rapporteren waar het afwijkt van een normatief contract. Als een validator nul bevindingen oplevert, is het resultaat getoetst aan de clausules die de validator implementeert. Het is geen algemeen certificaat.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”De module bestaat uit drie onderdelen.
PdfRValidator valideert een kandidaat-byte-stroom volgens ISO 23504-1:2020 (PDF/R-1). Hij werkt op ruwe bytes, niet op de interne status van de writer. Hij signaleert drift tussen wat de writer beoogt uit te voeren en wat de specificatie vereist, en fungeert als eindcontrole. De geïmplementeerde set clausules is het v5.1.0-cluster: §5 versie-identificatiecommentaar, §6.2.2/§6.2.3 header-allowlist, §6.2.4 verbod op generatie-0 en objectstreams, §6.5.7 allowlist voor content-stream-operatoren (alleen q, Q, cm, Do), §6.6.1 allowlist voor sleutels van afbeelding-XObjects, §6.4.3 allowlist voor sleutels van het Info-dictionary, en §6.3 allowlist voor sleutels van de Catalog. §6.7 incrementele updates en §6.8 versleuteling vallen expliciet buiten het bereik van het initiële cluster en worden als zodanig vastgelegd in claims.json. De validator stopt niet bij de eerste bevinding. Hij verzamelt elke afwijking in één doorloop, zodat de volledige diff zichtbaar is.
PdfRConformancePolicy is een onveranderlijk beleid voor de aanbevolen-maar-informatieve marges rond PDF/R-1. De normatieve §6-ondergrens is nooit configureerbaar. Het beleid regelt alleen de §A.5-aanbevelingen voor implementatielimieten, het ontmoedigen van multi-strips in §6.6.1, en de §A.6-eis voor XMP Extensible Metadata Platform (XMP) met het oog op een latere PDF/A-herclassificatie.
ArlingtonValidator voert het upstream Arlington PDF-model van de PDF Association uit in report-only-modus. In de huidige cyclus is hij adviserend: validateReportOnly() gooit nooit een exception. Hij gebruikt drie fallbackmodi. Wanneer de binary van de referentie-checker beschikbaar is, parseert hij gestructureerde bevindingen. Wanneer alleen de vastgepinde grammatica beschikbaar is, geeft hij één info-bevinding af die aantoont dat de grammatica-pin is geladen. Wanneer de grammatica niet beschikbaar is, retourneert hij een lege lijst. Een WaiverRegistry laat de orchestrator bekende, acceptabele meningsverschillen onderdrukken terwijl het audittraject behouden blijft.
De eerlijkheidsregel sluit aan op de ondersteuningsmatrix voor Cascading Style Sheets (CSS) en op de conformance-module. Een clausule is alleen Verified wanneer er een slagende test bestaat en de normatieve clausule wordt aangehaald. Een clausule die wel is geïmplementeerd maar geen specifieke, slagende fixture heeft, is Claimed. Clausules die buiten het bereik vallen, worden expliciet vermeld. Ze blijven niet impliciet. Een resultaat van PdfRValidator met nul bevindingen bevestigt alleen de clausules die de validator controleert. Hij doet geen uitspraak over §6.7 of §6.8, die hij niet implementeert.
API-oppervlak
Sectie met titel “API-oppervlak”| Type | Soort | Belangrijkste members |
|---|---|---|
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 |
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?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"; }}Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”<?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, ]);}Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”PdfRValidatoris gebaseerd op reguliere expressies, niet op een volledige parser. Hij richt zich op de deterministische uitvoer vanNextPDF\Writer\PdfRWriter. Gebruik hem als driftdetector voor die writer, niet als algemene PDF-parser.- Nul bevindingen ≠ volledige PDF/R-1-conformiteit. §6.7 (incrementele updates) en §6.8 (versleuteling) zijn niet geïmplementeerd in het v5.1.0-cluster en zijn als buiten bereik vastgelegd in
claims.json. Beschouw een schoon resultaat als “geen afwijking op de geïmplementeerde set clausules”, en niets meer. - Arlington is adviserend. In de huidige cyclus laat
validateReportOnly()de build nooit mislukken. Continuous integration (CI) gebruikt het artefact, maar laat er geen gate op afhangen. - PDF/A-validatie van het International Color Consortium (ICC) zit hier niet in. De ICC-validatie van OutputIntent volgens ISO 19005-4:2020 §6.2.2 zit in de Enterprise-
PdfAManager(nextpdf/pro), niet in de Compliance-module van Core. Het PDF/A-oppervlak van Core is beperkt tot deConformanceMode-discriminator. - Waivers behouden het audittraject. Een rule waarvoor een waiver geldt, wordt onderdrukt uit de lijst met bevindingen, maar de waiver-vermelding blijft vastleggen waarom.
Prestaties
Sectie met titel “Prestaties”PdfRValidator::validate() is één lineaire doorloop met begrensde regex-walks door de byte-stroom. De kosten schalen met de documentgrootte en blijven ruim binnen het modulebudget. In de grammar-only-modus is ArlingtonValidator O(grammar-rule-count) voor de bevinding die aantoont dat de grammatica is geladen. Het pad via de referentie-checker draait als subproces en wordt begrensd door het upstream-hulpmiddel, niet door NextPDF. Het is een out-of-band CI-stap.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Deze validators lezen niet-vertrouwde PDF-bytes. PdfRValidator verwijdert tussen haakjes geplaatste literals en hexadecimale literals vóór het extraheren van sleutels, zodat een geprepareerde Creator-string geen valse /Name-sleutel kan injecteren (ISO 32000-1:2008 §7.3.4.2 escape-afhandeling). De Arlington-adapter voert de upstream-checker uit als een begrensd subproces. Hij behandelt een time-out of uitvoeringsfout als “geen bevindingen” in plaats van gedeeltelijke uitvoer te vertrouwen. Zie het dreigingsmodel van het project voor het aanvalsoppervlak van het PDF-parsen.
Conformiteit
Sectie met titel “Conformiteit”| Standaard | Clausule | Wat de Compliance-module doet | Status |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator handhaaft de {q,Q,cm,Do} allowlist voor content-stream-operatoren | Verified (unit- + standards-profile- + integratietests slagen) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator handhaaft de allowlist voor sleutels van het Info-dictionary | Verified (afgedekt door tests) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7, §6.8 | Niet geïmplementeerd in het v5.1.0-cluster | Expliciete niet-dekking (vastgelegd in claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Doorloopt de Catalog-sleutelallowlist | Claimed (regex-doorloop; structureel) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Bewustzijn van het identificatieschema via de Conformance-module | Kruisverwijzing (zie /specifications/pdfa4/) |
Ondersteuning is geen conformiteit. Een run van PdfRValidator die geen bevindingen oplevert, bewijst alleen dat de invoer niet afweek van de §6-clausules die de validator implementeert. Het bevestigt niet dat het bestand conform PDF/R-1 is: §6.7 en §6.8 worden niet gecontroleerd. De Arlington-kruiscontrole is adviserend en bevestigt nooit conformiteit. Voor PDF/A-4 is veraPDF de gezaghebbende validator en draait deze out-of-band. Zie de conformance-module voor het veraPDF-oracle en de opt-in-gating ervan.
Citaten zijn geparafraseerd uit de compliance-corpus van NextPDF. De volledige 64-tekens lange reference_id-digests zijn vastgelegd in de frontmatter van de pagina en in _normative-evidence-conf.md.
Zie ook
Sectie met titel “Zie ook”- Conformance-module —
ConformanceMode-routing en het veraPDF-oracle - Audit-module — audittraject en attestatie-oppervlak
- PDF/A-4-specificatietoewijzing — ISO 19005-4 dekking en niet-dekking
- Security-module — dreigingsmodel voor het PDF-parsen