Zum Inhalt springen

PDF/A-4-Konformität: Was NextPDF für ISO 19005-4 ausgibt

Abgrenzung. NextPDF erzeugt eine Ausgabe, die auf PDF/A-4 ausgelegt ist; Konformität beansprucht die Bibliothek nicht — darüber entscheidet ein Validator (zum Beispiel veraPDF).

PDF/A-4 ist das auf PDF 2.0 basierende Archivierungsprofil ISO 19005-4:2020. NextPDF Core führt den ConformanceMode-Diskriminator (PdfA4, PdfA4e, PdfA4f) mit. Die Premium-Engine nextpdf/pro gibt den OutputIntent, das eingebettete ICC-Profil und das XMP-pdfaid-Identifikationsschema bei save() aus. Die Bibliothek erzeugt die Artefakte; veraPDF entscheidet über die Konformität. ISO 19005-4 §6.7.3 stellt klar: Die Eigenschaften pdfaid:part/pdfaid:rev „bestimmen für sich genommen nicht die Konformität“.

Terminal-Fenster
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

Die Core-Fähigkeit security.pdfa ist registriert; ohne nextpdf/pro meldet sie sich jedoch als nicht verfügbar. enablePdfA() wirft dann InvalidConfigException mit einem Upgrade-Pfad, anstatt eine nicht konforme Datei auszugeben.

Document::enablePdfA(?object $version = null) bildet eine PdfAVersion-Enum-Eingabe auf einen ConformanceMode-Case ab. Bei einer nicht erkannten Eingabe verwendet NextPDF standardmäßig ConformanceMode::PdfA4 ('4e' → PdfA4e, '4f' → PdfA4f). Der Modus steuert drei Ausgabepflichten, die der Standard einer konformen Datei vorschreibt:

  • OutputIntent + ICC — §6.2.3 erlaubt einer konformen Datei, ihre Farbeigenschaften über einen PDF/A-4-OutputIntent anzugeben, der einen DestOutputProfile-ICC-Stream referenziert. Laut §6.2.4.1 ist dies einer von zwei erlaubten Wegen zu geräteunabhängigen Farbangaben (der andere sind direkt angegebene geräteunabhängige Farbräume). Der OutputIntent ist daher der von NextPDF gewählte Weg, aber keine unbedingte Anforderung des Standards.
  • pdfaid-Identifikation — §6.7.3 verlangt das PDF/A-Identifikationsschema im dokumentweiten XMP (der AIIM-Namensraum pdfaid), das pdfaid:part/pdfaid:rev enthält. PDF/A-4e und PDF/A-4f setzen zusätzlich pdfa:conformance (E / F). §6.7.3 hält außerdem fest, dass eine Datei, die weder PDF/A-4e noch PDF/A-4f entspricht, keinen pdfa:conformance-Wert angeben darf.
  • Font-Einbettung — §6.2.10 verlangt, dass alle zum Rendern verwendeten Fonts eingebettet sind.

NextPDF gibt diese Artefakte aus; die Konformitätsbestimmung nach §5 nimmt es nicht vor. Diese Aufgabe liegt bei veraPDF; §6.7.3 behält die Bestimmung diesem Prozess vor.

MethodeWirkung
enablePdfA(?object $version = null): staticRoutet zu ConformanceMode::PdfA4/PdfA4e/PdfA4f; plant OutputIntent + ICC + XMP für save() ein. Wirft InvalidConfigException|PageLayoutException|CompressionException, wenn nextpdf/pro fehlt.
ConformanceMode::pdfaPart(): ?intLiefert den ISO 19005-Teil für den aktiven Modus (4 für PdfA4*).
ConformanceMode::pdfaConformanceLetter(): stringLiefert den pdfa:conformance-Buchstaben (E / F) oder leer.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Exception\InvalidConfigException;
use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/archival.pdf';
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n");
exit(1);
}
try {
$doc = Document::createStandalone();
$doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042');
$doc->setLanguage('en');
$doc->writeHtml('<h1>Archival record</h1><p>Body.</p>');
$doc->save($out); // OutputIntent + ICC + XMP scheduled here
} catch (InvalidConfigException $e) {
fwrite(STDERR, $e->getMessage() . "\n");
exit(1);
}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";

Nutzen Sie das Validator-Urteil als Build-Gate. Führen Sie verapdf --flavour 4 auf der Ausgabe aus und lassen Sie den Build bei einem Exit-Code ungleich null fehlschlagen. Das Validator-Urteil ist das Gate — die Ausgabe der Bibliothek ist dessen Eingabe, nie das Urteil selbst. Siehe /cookbook/php/pdfa4-conformance-gate/ für die vollständige Pipeline mit Gate.

  • Vor dem Inhalt aktivieren. Rufen Sie enablePdfA() auf, bevor Sie Inhalt hinzufügen; durch nachträgliches Aktivieren werden bereits geschriebene Objekte nicht erneut verarbeitet.
  • Keine Verschlüsselung. PDF/A verbietet den Schlüssel Encrypt. Rufen Sie setEncryption() bei einem PDF/A-Dokument nicht auf. Verschlüsselung dient der Vertraulichkeit, nicht der Archivierungsintegrität; beides schließt sich hier gegenseitig aus.
  • pdfa:conformance ist bedingt. Nur PDF/A-4e und PDF/A-4f setzen es. Wird es bei einer reinen PDF/A-4-Datei ausgegeben, ist das selbst ein Konformitätsverstoß (§6.7.3) — der ConformanceMode-Case verhindert das konstruktionsbedingt.
  • PDF/A-4f-Anhänge. Eingebettete Dateien in einer PDF/A-4f-Datei müssen laut §6.7.5 die Schlüssel F und UF tragen (Desc empfohlen). Das stützt den ZUGFeRD/Factur-X-Hybridpfad.

Die Einbettung von OutputIntent + ICC fügt bei save() einen ICC-Stream fester Größe (das Arbeitsraumprofil) und das XMP-Paket hinzu. Planen Sie für ein typisches Dokument eine Wall-Zeit ≤ 1500 ms und einen Peak ≤ 128 MB ein.

PDF/A-4 verbietet Verschlüsselung. Das Profil ist eine Vorgabe für Archivierung und Langlebigkeit, keine Sicherheitskontrolle. Schlüsselverwahrung und die Richtlinie des Verifizierers liegen außerhalb des Geltungsbereichs dieses Profils; siehe das Trust Center.

Die PDF/A-4-Ausgabe läuft prozessintern und schreibt nur das Dokument, das eingebettete ICC-Profil und das XMP-Paket. Kein Inhalt verlässt den Prozess. Für PII im Quellinhalt ist der Integrator verantwortlich — das Profil schwärzt nicht.

Das Beispiel schreibt nur den Ausgabepfad und den Validator-Befehl auf STDERR. Es werden keine Dokumentbytes geloggt. Das Recipe respektiert NEXTPDF_COOKBOOK_OUTPUT und gibt das PDF nie auf STDOUT aus.

Eine PDF/A-4-Datei ist nicht zugriffsgeschützt. Jede Person mit Zugriff auf die Datei kann sie lesen; das Profil gewährleistet die Langlebigkeit der Darstellung, nicht die Vertraulichkeit. Behandeln Sie den OutputIntent-ICC-Stream als öffentlich.

Die PDF/A-4-Ausgabe führt keine Kryptografie durch. Eine digitale Signatur auf einer PDF/A-4-Datei (PDF/A-4 §6.5 erlaubt PAdES-Profile) ist ein separates Anliegen des Signatur-Recipes und übernimmt dessen FIPS-Haltung. Diese Seite trifft keine Aussage zu Signaturen.

AussageSpezifikationKlauselreference_id
Eine PDF/A-4-Datei darf ihre Farbeigenschaften über einen PDF/A-OutputIntent angeben, der ein DestOutputProfile-ICC-Profil referenziert.ISO 19005-4§6.2.3
Geräteunabhängige Farbe kann direkt oder indirekt über das OutputIntent-DestOutputProfile angegeben werden (einer von zwei erlaubten Wegen).ISO 19005-4§6.2.4.1
Die PDF/A-Version wird über das PDF/A-Identifikationsschema (pdfaid) im dokumentweiten XMP angegeben.ISO 19005-4§6.7.3
pdfaid:part / pdfaid:rev bestimmen für sich genommen nicht die Konformität; die Bestimmung erfolgt gemäß Klausel 5.ISO 19005-4§6.7.3
Eine Datei, die weder PDF/A-4e noch PDF/A-4f entspricht, darf keinen pdfa:conformance-Wert angeben.ISO 19005-4§6.7.3
Eingebettete Dateien in PDF/A-4f benötigen die Schlüssel F und UF (Desc empfohlen).ISO 19005-4§6.7.5
Alle zum Rendern verwendeten Fonts müssen eingebettet sein.ISO 19005-4§6.2.10
Transparenz-/Farbnutzung hängt von einem deklarierten OutputIntent ab.ISO 19005-4§6.2.9

Zitate bestehen aus Klausel-IDs und reference_id-Zeigern auf den Verifizierungskorpus. Standardtext wird nicht wiedergegeben; die Klauseln sind in den Worten von NextPDF zusammengefasst.