Zum Inhalt springen

Konformität: ConformanceMode-Routing und Validierungsgrenze

NextPDF\Conformance enthält den einzigen Diskriminator, der dem Writer mitteilt, welchen ISO-Vertrag ein Dokument anstrebt. Die Bibliothek gibt die vom Vertrag definierten Strukturen aus. Sie zertifiziert nicht und kann nicht zertifizieren, dass die resultierende Datei konform ist. Nur ein externer Validator zertifiziert die Konformität.

Terminal-Fenster
composer require nextpdf/core:^3

Das Conformance-Modul hat zwei öffentliche Typen. ConformanceMode ist ein Backed-Enum, das den Zielvertrag benennt (Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f). ConformancePolicy ist ein unveränderliches Value Object, das einen Modus mit orthogonalen Strenge-Schaltern kombiniert.

Der Modus ist die alleinige Quelle der Wahrheit für nachgelagerte Writer-Gates. Bevor dieses Enum existierte, leitete die Engine die Antwort auf die Frage „Ist dieses Dokument spec-getaggt?“ aus verstreuten Flags ab. ConformanceMode::isTagged(), isAccessibility(), isArchival(), pdfaPart(), pdfaConformanceLetter() und requiresPdf17() liefern jeweils eine typisierte Antwort, die der Writer direkt liest. Der Katalog, /MarkInfo, die Dateiheader-Lineage und die XMP-pdfaid-Marker bleiben mit der deklarierten Absicht konsistent.

Lesen Sie die Support-Grenze genau. NextPDF Core erzeugt Strukturen, die durch diese Standards definiert sind. ISO 19005-4:2020 §6.7.3 spezifiziert das Identifikationsschema, das festhält, welche PDF/A-Variante eine Datei beansprucht. ISO 19005-4:2020 legt fest, dass die eigentliche Konformitätsbestimmung gemäß Clause 5 dieses Standards erfolgt — also durch ein Prüfwerkzeug anhand der normativen Anforderungen, nicht durch die erzeugende Bibliothek. ISO 14289-2:2024 §6 fasst Konformität als Eigenschaft auf, die eine Datei erfüllt. Dass NextPDF einen Modus setzt, ist eine notwendige Eingabe für eine konforme Datei. Für sich allein ist es kein Konformitätsergebnis.

Das entspricht derselben Verified-versus-Claimed-Disziplin, die die CSS-Support-Matrix anwendet. Eine Fähigkeit ist nur dann Verified, wenn ein bestandener Test oder Oracle-Lauf und eine zitierte Clause vorliegen. Alles andere ist Implementierung, die die Bibliothek ausgibt — nützlich, aber keine Konformitätsgarantie. Konformität ist eine Eigenschaft der finalen Datei plus eines Validators, kein Versprechen der Bibliothek. Validieren Sie die Ausgabe mit veraPDF (siehe „Konformität“ weiter unten).

Für die Archivierungsarbeit ist eine zweite Grenze wichtig. Das PDF/A-4-Authoring — das OutputIntent-Dictionary, das eingebettete ICC-Profil und das XMP-Erweiterungsschema — wird in der Erweiterung nextpdf/pro ausgeliefert, nicht in Core. In einer Core-only-Installation wirft Document::enablePdfA() eine InvalidConfigException, weil die Capability security.pdfa nicht registriert ist. Core besitzt weiterhin den Diskriminator ConformanceMode, damit Introspektion und der PDF/UA-2-getaggte Pfad funktionieren, erzeugt aber nicht eigenständig eine PDF/A-4-Datei.

TypArtWichtige Member
NextPDF\Conformance\ConformanceModeenum: stringPlain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f; isTagged(), isAccessibility(), isArchival(), requiresPdfUa2PageTabs(), pdfaPart(): ?int, pdfaConformanceLetter(): string, requiresPdf17(): bool
NextPDF\Conformance\ConformancePolicyfinal readonly class__construct(ConformanceMode $mode = PdfUa2, bool $strictUa2 = false, bool $rejectUnvalidatedLang = false, …); lax(), strictUa2(), withUax9IsolateSupport(), withoutAstShadowMode(), withBlackPointCompensation(), withStrictOcspProducedAtTolerance(), withAllowStaleOcsp()

ConformancePolicy erzwingt in seinem Konstruktor eine Invariante: Die strikten PDF/UA-2-Schalter gelten nur, wenn der Modus PdfUa2 ist, und strictUa2 = true erzwingt rejectUnvalidatedLang = true. Inkohärente Kombinationen werfen InvalidConfigException, statt stillschweigend zu degradieren.

<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
$mode = ConformanceMode::PdfA4f;
// Introspect the declared contract — these drive writer-side gates.
$mode->pdfaPart(); // 4
$mode->pdfaConformanceLetter(); // 'F'
$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)
$mode->isArchival(); // true

Der in Core ausgelieferte Pfad, der einen Konformitätsvertrag vollständig durchläuft, ist die PDF/UA-2-getaggte Route. Das ist das ausführbare Beispiel (examples/31-pdfua2-tagged.php). Es ist außerdem das Oracle-Ziel für das strikte PDF/UA-2-Profil.

<?php
declare(strict_types=1);
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Set the tagged-PDF contract BEFORE writing content so the HTML pipeline
// wires the TaggedContentEmitter at parser-construction time.
$doc->enableTaggedPdf(lang: 'en');
$doc->setTitle('Accessible report');
// … write content …
$doc->save(__DIR__ . '/out/report-ua2.pdf');
// The library has now emitted PDF/UA-2 structures. It has NOT asserted
// conformance. Verify the file with the pinned veraPDF oracle:
//
// php oracle/run.php pdfua.strict
//
// (Requires the veraPDF Docker image — opt-in; see "Conformance" below.)
  • PDF/A-4-Authoring gehört zu Premium. Document::enablePdfA() wirft in einer Core-only-Installation eine InvalidConfigException (security.pdfa nicht verfügbar). Core besitzt den Diskriminator, nicht die OutputIntent-/ICC-/XMP-Ausgabe. Siehe /specifications/pdfa4/.
  • Umbrella-Fälle vs. Variantenfälle. PdfA4 ist der Umbrella-Fall und meldet einen leeren pdfaConformanceLetter(). ISO 19005-4:2020 §6.7.3 legt fest, dass eine Datei, die weder PDF/A-4e noch PDF/A-4f entspricht, keinen pdfa:conformance bereitstellt. Verwenden Sie PdfA4e / PdfA4f nur für die Varianten nach Annex B / Annex A.
  • Striktes PDF/UA-2 ist opt-in. ConformancePolicy::lax() ist der BC-sichere Standard. strictUa2() erzwingt /MarkInfo /Marked true und die Ablehnung von BCP-47. Wird es in einem Nicht-PdfUa2-Modus aktiviert, wirft das eine Exception.
  • isTagged() ist variantenbewusst. Plain, PdfA2, PdfA3b und PdfA4e melden „untagged“. Der Writer darf nicht davon ausgehen, dass ein Archivierungsmodus einen Strukturbaum impliziert.
  • Ein gesetzter Modus ist noch keine bestandene Datei. PdfA4 zu setzen, macht die Ausgabe nicht zu einer gültigen PDF/A-4-Datei. Führen Sie einen Validator aus.

ConformanceMode und ConformancePolicy sind reine Value-Typen: Die Auflösung des Enum-Falls und das match-Dispatch sind O(1) ohne Allokation abgesehen vom unveränderlichen Policy-Objekt. Sie verursachen keine messbaren Kosten im Schreibpfad. Der Writer dominiert das Modulbudget (wall_ms: 1500), nicht der Diskriminator. Das veraPDF-Oracle ist ein Out-of-Band-CI-Schritt, kein Teil der Dokumenterzeugung.

Die strikten Schalter in ConformancePolicy steuern Fail-closed-Sicherheitsverhalten: securityPkiRfc5280Strict (RFC 5280 §6 Pfadvalidierung), strictOcspProducedAtTolerance (RFC 6960 §4.2.2.1 Skew-Fenster) und allowStaleOcsp (Standard false — OCSP-Antworten ohne nextUpdate ablehnen). Diese Standardwerte sind konservativ und werden gemäß der dokumentierten Abwärtskompatibilitätsstrategie in einem künftigen Major auf strikt umgestellt. Details zum Signaturpfad finden Sie im Security-Modul und im Bedrohungsmodell des Projekts.

NextPDF zertifiziert keine Konformität. Es gibt Strukturen aus, die durch die unten aufgeführten Standards definiert sind, und ein separater Validator entscheidet, ob eine Datei konform ist.

StandardClauseWas NextPDF Core tutStatus
ISO 14289-2:2024 (PDF/UA-2)§6Gibt Strukturbaum, /MarkInfo /Marked true (strikt), /Lang und pdfuaid-XMP über den Core-getaggten Pfad ausVerifiziertes Profil: pdfua.strict, validiert durch das veraPDF-Oracle (php oracle/run.php pdfua.strict), wenn die veraPDF-Binärdatei vorhanden ist (Opt-in-Gate)
ISO 19005-4:2020 (PDF/A-4)§6.7.3Erzeugt den Diskriminator pdfaid:part / pdfa:conformance über ConformanceModeClaimed (Diskriminator-Ausgabe, Unit-getestet); das Datei-Authoring von PDF/A-4 ist nur in Premium verfügbar
ISO 32000-2:2020 (PDF 2.0)§7.5.2Basisstruktur für catalog/documentClaimed (Verhalten der Basis-Engine)

Support ist keine Konformität. NextPDF Core erzeugt PDF/UA-2- und PDF/A-4-Identifikationsstrukturen (Implementierung, belegt durch die Tests in tests/Unit/Conformance/). Dass eine Datei PDF/A-4- oder PDF/UA-2-konform ist, kann nur ein Validator zusichern, der das passende Profil ausführt. Gemäß ISO 19005-4:2020 Clause 5 ist die Konformitätsbestimmung die Aufgabe des Validators, nicht die der erzeugenden Bibliothek.

Das veraPDF-Gating benennt seine Voraussetzung klar. Das Oracle (oracle/run.php, oracle/lib/OracleRunner.php) ruft ein gepinntes veraPDF-Docker-Image auf. Wenn Docker oder das Image fehlt, beendet der Runner den Lauf mit Code 2 (Infrastrukturfehler) und verifiziert nichts. Das Profil pdfua.strict ist daher ein Opt-in-Konformitäts-Gate: Es beweist Konformität nur auf Maschinen, auf denen die veraPDF-Binärdatei vorhanden ist. NextPDF liefert keinen eingebetteten Validator und stellt in dessen Abwesenheit keine Konformitätsbehauptung auf.

Die Zitate sind aus dem Compliance-Korpus von NextPDF paraphrasiert. Die vollständigen 64-Zeichen-reference_id-Digests sind im Frontmatter der Seite und in _normative-evidence-conf.md festgehalten.