PDF/A-4-Ausgabe erzeugen und mit dem veraPDF-Oracle absichern
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Dieses Recipe erzeugt eine PDF/A-4-Ausgabe mit dem Premium-PdfAManager, führt veraPDF aus und verwendet dessen Urteil als Build-Gate. Die Library erzeugt die Artefakte; der Validator entscheidet über die Konformität. Das Recipe folgt examples/32-pdfa4-icc.php.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Core installiert:
composer require nextpdf/core:^3. - Premium installiert:
composer require nextpdf/pro. PDF/A-4 gehört zur Premium-Stufe (ADR-011). Ohne Premium wirftenablePdfA()eineInvalidConfigExceptionund nennt einen Upgrade-Pfad. - veraPDF im
PATHfür den Gate-Schritt.
- Fragen Sie die Capability-Registry nach
security.pdfaab, damit eine reine Core-Installation eine klare Meldung statt eines Stack-Traces erhält. - Erstellen Sie das Dokument und rufen Sie
enablePdfA()auf, bevor Sie Inhalt hinzufügen. - Setzen Sie Metadaten und schreiben Sie Inhalt. Rufen Sie nicht
setEncryption()auf; PDF/A verbietet denEncrypt-Schlüssel. - Speichern Sie die Datei. Beim Aufruf von
save()plant derPdfAManagerden OutputIntent, das eingebettete ICC-Profil und die XMP-Erweiterungsschemata ein. - Führen Sie
verapdf --flavour 4für die Ausgabe aus. Lassen Sie den Build bei einem Exit-Code ungleich null fehlschlagen. Das Urteil des Validators ist das Gate.
Vollständiges Beispiel
Abschnitt betitelt „Vollständiges Beispiel“<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/archival.pdf';
// Step 1 — probe before activating a Premium-gated feature.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
try { $doc = Document::createStandalone();
// Step 2 — enable PDF/A-4 before content. Defaults to PdfA4. $doc->enablePdfA();
// Step 3 — metadata and content. No setEncryption() on a PDF/A document. $doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->addPage(); $doc->setFont('helvetica', '', 12); $doc->cell(0, 10, 'This document targets PDF/A-4.', newLine: true);
// Step 4 — save. PdfAManager emits OutputIntent + ICC + XMP here. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
// Step 5 — the gate. veraPDF, not the library, asserts conformance.$exitCode = 0;$output = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $output, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $output) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDF\n";Erwartete Ausgabe
Abschnitt betitelt „Erwartete Ausgabe“Wenn veraPDF erfolgreich ist:
veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDFFehlt das Premium-Paket, beendet sich das Skript mit einem Exit-Code ungleich null, gibt eine umsetzbare Meldung aus und schreibt keine Datei.
Grenzfälle
Abschnitt betitelt „Grenzfälle“- Premium-Gate.
enablePdfA()wirft in einer reinen Core-Installation eineInvalidConfigException, diesecurity.pdfanennt und den Lösungswegcomposer require nextpdf/proangibt. Fragen Sie zuerst die Registry ab. - Verschlüsselungskonflikt. Der Aufruf von
setEncryption(),useAesGcm()odersetPublicKeyEncryption()an einem PDF/A-Dokument löst in beiden Aufrufreihenfolgen eine Inkompatibilitäts-Exception aus. PDF/A verbietet den Trailer-SchlüsselEncrypt. - Konformitätsvariante. Übergeben Sie eine
PdfAVersionanenablePdfA()für4eoder4f. Der Standard ist4. - Das Gate ist der Validator, nicht die Engine. Ein erfolgreiches
save()bedeutet, dass NextPDF die Artefakte ausgegeben hat, die PDF/A-4 verlangt. Für sich allein belegt das keine Konformität. veraPDF bestätigt die Konformität; dieses Recipe macht dessen Urteil zum Gate. Behaupten Sie erst dann, dass eine Datei PDF/A-4-konform ist, wenn der Validator erfolgreich ist.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Spezifikation | Abschnitt | reference_id |
|---|---|---|---|
| Eine PDF/A-4-Datei darf ihre Farbcharakteristik über einen PDF/A-OutputIntent angeben, der auf ein eingebettetes ICC-Profil verweist (geräteunabhängige Farbe kann stattdessen direkt angegeben werden; §6.2.4.1). | ISO 19005-4 | §6.2.3 | |
| Verschlüsselung ist in PDF/A-4 verboten. | ISO 19005-4 | §6.6.4 | |
| PDF/A-4 enthält die pdfaid-Kennzeichnung in den XMP-Metadaten. | ISO 19005-4 | §6.7.5 |
Der Validator bestätigt die Konformität. Die Library erzeugt eine Ausgabe, die konform sein soll; das Oracle entscheidet.