Compliance: PDF/R-1-Validator, Arlington-Grammatik, Lifecycle-Werkzeuge
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“NextPDF\Compliance liefert Byte-Stream-Validatoren und eine Grammatik-Gegenprüfung, die ein fertig erzeugtes PDF lesen und melden, an welchen Stellen es von einem normativen Vertrag abweicht. Liefert ein Validator null Befunde, ist das ein geprüftes Ergebnis für die Klauseln, die er implementiert – kein pauschales Zertifikat.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/core:^3Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“Das Modul besteht aus drei Teilen.
PdfRValidator validiert einen Kandidaten-Byte-Stream nach ISO 23504-1:2020 (PDF/R-1). Er arbeitet mit den Rohbytes – nicht mit dem internen Zustand des Writers. Er erkennt Abweichungen zwischen dem, was der Writer ausgeben will, und dem, was die Spezifikation verlangt. Er ist die abschließende Prüfung. Die implementierte Klauselmenge ist das v5.1.0-Cluster: §5 Versions-Identifikationskommentar, §6.2.2/§6.2.3 Header-Positivliste, §6.2.4 Verbot von Generation-0 und Objekt-Streams, §6.5.7 Positivliste der Content-Stream-Operatoren (nur q, Q, cm, Do), §6.6.1 Positivliste der Image-XObject-Schlüssel, §6.4.3 Positivliste der Info-Dictionary-Schlüssel und §6.3 Positivliste der Catalog-Schlüssel. §6.7 inkrementelle Aktualisierungen und §6.8 Verschlüsselung liegen für das erste Cluster ausdrücklich außerhalb des Geltungsbereichs und sind als solche in claims.json deklariert. Der Validator bricht beim ersten Befund nicht ab. Er sammelt alle Abweichungen in einem Durchlauf, damit der Aufrufer das vollständige Diff sieht.
PdfRConformancePolicy ist eine unveränderliche Policy für die empfohlenen, aber informativen Bereiche rund um PDF/R-1. Die normative Basis aus §6 ist niemals konfigurierbar. Die Policy steuert ausschließlich die §A.5-Empfehlungen zu Implementierungsgrenzen, die §6.6.1 Mehrfach-Strip-Abratung und die §A.6 XMP-Anforderung für eine nachgelagerte PDF/A-Neuklassifizierung.
ArlingtonValidator bindet das vorgelagerte Arlington-PDF-Modell der PDF Association im Report-only-Modus ein. Im aktuellen Zyklus ist er immer beratend: validateReportOnly() wirft niemals eine Exception. Er arbeitet mit drei abgestuften Modi. Ist das Referenz-Checker-Binary vorhanden, parst er strukturierte Befunde. Ist nur die gepinnte Grammatik vorhanden, gibt er einen info-Befund aus, der belegt, dass die gepinnte Grammatik geladen wurde. Ohne Grammatik gibt er eine leere Liste zurück. Eine WaiverRegistry lässt den Orchestrator bekannte, akzeptable Unstimmigkeiten unterdrücken und bewahrt dabei den Audit-Trail.
Die Ehrlichkeitsregel entspricht derjenigen in der CSS-Support-Matrix und im Conformance-Modul. Eine Klausel ist nur dann Verified, wenn ein bestandener Test existiert und die normative Klausel zitiert ist. Eine Klausel, die implementiert ist, aber keine eigene bestandene Fixture hat, ist Claimed. Klauseln außerhalb des Geltungsbereichs werden ausdrücklich genannt und bleiben nicht unausgesprochen. Ein Ergebnis von PdfRValidator mit null Befunden sichert nur die Klauseln zu, die der Validator tatsächlich prüft. Es trifft keine Aussage über §6.7 oder §6.8, die er nicht implementiert.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“| Typ | Art | Wichtige Member |
|---|---|---|
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 |
Codebeispiel – Schnellstart
Abschnitt betitelt „Codebeispiel – Schnellstart“<?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"; }}Codebeispiel – Produktion
Abschnitt betitelt „Codebeispiel – Produktion“<?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, ]);}Sonderfälle & Fallstricke
Abschnitt betitelt „Sonderfälle & Fallstricke“PdfRValidatorist regex-basiert, kein vollständiger Parser. Er zielt auf die deterministische Ausgabe vonNextPDF\Writer\PdfRWriterab und dient als Abweichungsdetektor für diesen Writer. Er ist kein allgemeiner PDF-Parser.- Null Befunde ≠ vollständige PDF/R-1-Konformität. §6.7 (inkrementelle Aktualisierungen) und §6.8 (Verschlüsselung) sind im v5.1.0-Cluster nicht implementiert und in
claims.jsonals außerhalb des Geltungsbereichs deklariert. Behandeln Sie ein sauberes Ergebnis als „keine Abweichung in der implementierten Klauselmenge“, mehr nicht. - Arlington ist beratend.
validateReportOnly()lässt den Build im aktuellen Zyklus niemals fehlschlagen. CI verarbeitet das Artefakt, nutzt es aber nicht als Gate. - Die ICC-Validierung für PDF/A ist nicht Teil dieses Moduls. Die ICC-Validierung des OutputIntent nach ISO 19005-4:2020 §6.2.2 erfolgt im Enterprise-
PdfAManager(nextpdf/pro), nicht im Compliance-Modul von Core. Die PDF/A-Oberfläche von Core besteht nur aus demConformanceMode-Diskriminator. - Waiver bewahren den Audit-Trail. Eine durch einen Waiver abgedeckte Regel wird aus der Befundliste unterdrückt, aber der Waiver-Eintrag bleibt als Nachweis für das Warum erhalten.
Performance
Abschnitt betitelt „Performance“PdfRValidator::validate() führt einen einzelnen linearen Durchlauf mit begrenzten Regex-Walks über den Byte-Stream aus. Die Kosten skalieren mit der Dokumentgröße und bleiben deutlich innerhalb des Modulbudgets. ArlingtonValidator ist im Grammar-only-Modus für den Lade-Nachweis-Befund O(Grammatik-Regelanzahl). Der Referenz-Checker-Pfad läuft als Subprozess und wird durch das vorgelagerte Werkzeug begrenzt, nicht durch NextPDF. Er bleibt ein Out-of-Band-CI-Schritt.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“Diese Validatoren lesen nicht vertrauenswürdige PDF-Bytes. PdfRValidator entfernt geklammerte und Hex-Literale vor der Schlüsselextraktion. Dadurch kann ein manipulierter Creator-String keinen falschen /Name-Schlüssel einschleusen (ISO 32000-1:2008 §7.3.4.2 Escape-Behandlung). Der Arlington-Adapter führt den vorgelagerten Checker als begrenzten Subprozess aus. Er behandelt ein Timeout oder einen Ausführungsfehler als „keine Befunde“ und vertraut keiner Teilausgabe. Siehe das Bedrohungsmodell des Projekts zur Angriffsfläche des PDF-Parsings.
Konformität
Abschnitt betitelt „Konformität“| Standard | Klausel | Was das Compliance-Modul tut | Status |
|---|---|---|---|
| ISO 23504-1:2020 (PDF/R-1) | §6.5.7 | PdfRValidator erzwingt die Positivliste der Content-Stream-Operatoren für {q,Q,cm,Do} | Verified (Unit-, Standards-Profile- und Integrationstests bestanden) |
| ISO 23504-1:2020 (PDF/R-1) | §6.4.3 | PdfRValidator erzwingt die Positivliste der Info-Dictionary-Schlüssel | Verified (test-gestützt) |
| ISO 23504-1:2020 (PDF/R-1) | §6.7, §6.8 | Im v5.1.0-Cluster nicht implementiert | Explizite Nicht-Abdeckung (deklariert in claims.json) |
| ISO 32000-2:2020 (PDF 2.0) | §7.5.2 | Positivlisten-Walk für Catalog-Schlüssel | Claimed (Regex-Walk; strukturell) |
| ISO 19005-4:2020 (PDF/A-4) | §6.7.3 | Berücksichtigt das Identifikationsschema über das Conformance-Modul | Querverweis (siehe /specifications/pdfa4/) |
Support ist nicht Konformität. Ein Lauf von PdfRValidator, der keine Befunde liefert, belegt, dass die Eingabe nicht von den §6-Klauseln abweicht, die der Validator implementiert. Er sichert nicht zu, dass die Datei eine konforme PDF/R-1-Datei ist: §6.7 und §6.8 werden nicht geprüft. Die Arlington-Gegenprüfung ist beratend und sichert niemals Konformität zu. Für PDF/A-4 ist veraPDF der maßgebliche Validator, der out of band läuft – siehe das Conformance-Modul für das veraPDF-Oracle und sein optionales Gating.
Die Zitate sind aus dem NextPDF-Compliance-Korpus paraphrasiert. Die vollständigen 64-Zeichen-reference_id-Digests stehen im Frontmatter der Seite und in _normative-evidence-conf.md.
Siehe auch
Abschnitt betitelt „Siehe auch“- Conformance-Modul –
ConformanceMode-Routing und das veraPDF-Oracle - Audit-Modul – Audit-Trail- und Attestierungsoberfläche
- PDF/A-4-Spezifikations-Mapping – Abdeckung und Nichtabdeckung nach ISO 19005-4
- Security-Modul – Bedrohungsmodell des PDF-Parsings