Konformität: ConformanceMode-Routing und Validierungsgrenze
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“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.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/core:^3Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“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.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“| Typ | Art | Wichtige Member |
|---|---|---|
NextPDF\Conformance\ConformanceMode | enum: string | Plain, PdfUa1, PdfUa2, PdfA2, PdfA3, PdfA3b, PdfA3u, PdfA4, PdfA4e, PdfA4f; isTagged(), isAccessibility(), isArchival(), requiresPdfUa2PageTabs(), pdfaPart(): ?int, pdfaConformanceLetter(): string, requiresPdf17(): bool |
NextPDF\Conformance\ConformancePolicy | final 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.
Codebeispiel — Schnellstart
Abschnitt betitelt „Codebeispiel — Schnellstart“<?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(); // trueCodebeispiel — Produktion
Abschnitt betitelt „Codebeispiel — Produktion“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.)Grenzfälle & Fallstricke
Abschnitt betitelt „Grenzfälle & Fallstricke“- PDF/A-4-Authoring gehört zu Premium.
Document::enablePdfA()wirft in einer Core-only-Installation eineInvalidConfigException(security.pdfanicht verfügbar). Core besitzt den Diskriminator, nicht die OutputIntent-/ICC-/XMP-Ausgabe. Siehe/specifications/pdfa4/. - Umbrella-Fälle vs. Variantenfälle.
PdfA4ist der Umbrella-Fall und meldet einen leerenpdfaConformanceLetter(). ISO 19005-4:2020 §6.7.3 legt fest, dass eine Datei, die weder PDF/A-4e noch PDF/A-4f entspricht, keinenpdfa:conformancebereitstellt. Verwenden SiePdfA4e/PdfA4fnur 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 trueund die Ablehnung von BCP-47. Wird es in einem Nicht-PdfUa2-Modus aktiviert, wirft das eine Exception. isTagged()ist variantenbewusst.Plain,PdfA2,PdfA3bundPdfA4emelden „untagged“. Der Writer darf nicht davon ausgehen, dass ein Archivierungsmodus einen Strukturbaum impliziert.- Ein gesetzter Modus ist noch keine bestandene Datei.
PdfA4zu setzen, macht die Ausgabe nicht zu einer gültigen PDF/A-4-Datei. Führen Sie einen Validator aus.
Performance
Abschnitt betitelt „Performance“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.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“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.
Konformität
Abschnitt betitelt „Konformität“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.
| Standard | Clause | Was NextPDF Core tut | Status |
|---|---|---|---|
| ISO 14289-2:2024 (PDF/UA-2) | §6 | Gibt Strukturbaum, /MarkInfo /Marked true (strikt), /Lang und pdfuaid-XMP über den Core-getaggten Pfad aus | Verifiziertes 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.3 | Erzeugt den Diskriminator pdfaid:part / pdfa:conformance über ConformanceMode | Claimed (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.2 | Basisstruktur für catalog/document | Claimed (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.
Siehe auch
Abschnitt betitelt „Siehe auch“- Compliance-Modul — PDF/R-1-Validator, Arlington-Grammatik, Lifecycle-Tools
- Accessibility-Modul — der PDF/UA-2-getaggte Content-Emitter
- PDF/A-4-Spezifikationszuordnung — Feature-Abdeckung von ISO 19005-4 vs. explizite Nicht-Abdeckung
- PDF/UA-2-Spezifikationszuordnung — Accessibility-Zuordnung nach ISO 14289-2
- Security-Modul — strikte Schalter für den Signaturpfad