Zum Inhalt springen

Compliance: PDF/R-1-Validator, Arlington-Grammatik, Lifecycle-Werkzeuge

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.

Terminal-Fenster
composer require nextpdf/core:^3

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.

TypArtWichtige Member
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 ist regex-basiert, kein vollständiger Parser. Er zielt auf die deterministische Ausgabe von NextPDF\Writer\PdfRWriter ab 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.json als 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 dem ConformanceMode-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.

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.

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.

StandardKlauselWas das Compliance-Modul tutStatus
ISO 23504-1:2020 (PDF/R-1)§6.5.7PdfRValidator 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.3PdfRValidator erzwingt die Positivliste der Info-Dictionary-SchlüsselVerified (test-gestützt)
ISO 23504-1:2020 (PDF/R-1)§6.7, §6.8Im v5.1.0-Cluster nicht implementiertExplizite Nicht-Abdeckung (deklariert in claims.json)
ISO 32000-2:2020 (PDF 2.0)§7.5.2Positivlisten-Walk für Catalog-SchlüsselClaimed (Regex-Walk; strukturell)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Berücksichtigt das Identifikationsschema über das Conformance-ModulQuerverweis (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.