Ga naar inhoud

PDF/A-4-uitvoer produceren en bewaken met veraPDF als oracle

Deze handleiding laat zien hoe u Portable Document Format/Archive (PDF/A-4)-uitvoer maakt met de Premium PdfAManager, veraPDF uitvoert en het oordeel ervan als build-poort gebruikt. NextPDF schrijft de artefacten; de validator bepaalt de conformiteit. De werkwijze sluit aan op examples/32-pdfa4-icc.php.

  • Core is geïnstalleerd: composer require nextpdf/core:^3.
  • Premium is geïnstalleerd: composer require nextpdf/pro. PDF/A-4 is een Premium-functie (Architecture Decision Record ADR-011). Zonder Premium werpt enablePdfA() een InvalidConfigException met een upgradepad.
  • veraPDF op PATH voor de poortstap.
  1. Controleer het capability-register op security.pdfa, zodat een Core-only-installatie een duidelijke melding toont in plaats van een stack trace.
  2. Maak het document en roep vervolgens enablePdfA() aan voordat u inhoud toevoegt.
  3. Stel metadata in en schrijf inhoud. Roep setEncryption() niet aan; PDF/A verbiedt de Encrypt-sleutel.
  4. Sla het document op. Tijdens save() neemt de PdfAManager de OutputIntent, het ingesloten International Color Consortium (ICC)-profiel en de Extensible Metadata Platform (XMP)-uitbreidingsschema’s op.
  5. Voer verapdf --flavour 4 uit op de uitvoer. Laat de build mislukken als de opdracht met een niet-nul-status wordt afgesloten. Het oordeel van de validator is de poort.
<?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";

Wanneer veraPDF slaagt:

veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDF

Wanneer het Premium-pakket ontbreekt, sluit het script af met een niet-nul-status en een bruikbare melding, en schrijft het geen bestand.

  • Premium-poort. In een Core-only-installatie werpt enablePdfA() een InvalidConfigException die security.pdfa noemt en als remedie composer require nextpdf/pro aanreikt. Controleer eerst het register.
  • Versleutelingsconflict. Het aanroepen van setEncryption(), useAesGcm() of setPublicKeyEncryption() op een PDF/A-document veroorzaakt een incompatibiliteitsuitzondering, ongeacht de aanroepvolgorde. PDF/A verbiedt de Encrypt-trailersleutel.
  • Conformiteitsvariant. Geef een PdfAVersion door aan enablePdfA() voor 4e of 4f. De standaardwaarde is 4.
  • De poort is de validator, niet de engine. Een geslaagde save() betekent dat NextPDF de artefacten heeft geschreven die PDF/A-4 vereist. Dit bewijst op zichzelf geen conformiteit. veraPDF stelt de conformiteit vast; dit recept gebruikt het oordeel ervan als poort. Verklaar pas dat een bestand PDF/A-4-conform is wanneer de validator slaagt.
VerklaringSpecificatieClausulereference_id
Een PDF/A-4-bestand mag zijn kleurkenmerken opgeven met een PDF/A OutputIntent die verwijst naar een ingesloten International Color Consortium (ICC)-profiel. Apparaatonafhankelijke kleur kan in plaats daarvan rechtstreeks worden opgegeven; zie §6.2.4.1.ISO 19005-4§6.2.3
Versleuteling is verboden in PDF/A-4.ISO 19005-4§6.6.4
PDF/A-4 bevat pdfaid-identificatie in Extensible Metadata Platform (XMP)-metadata.ISO 19005-4§6.7.5

De validator stelt de conformiteit vast. De bibliotheek produceert uitvoer die bedoeld is om te voldoen; de validator beslist.