PDF/A-4-uitvoer voor archivering produceren
In het kort
Sectie met titel “In het kort”Gebruik dit recipe om PDF/A-4-uitvoer voor archivering (International Organization for Standardization (ISO) 19005-4) te produceren met de PdfAManager van Pro. Wanneer je opslaat, neemt NextPDF de OutputIntent, het ingebedde International Color Consortium (ICC)-profiel en de identificatiemetadata op. NextPDF produceert uitvoer die bedoeld is om conform te zijn; een onafhankelijke validator beslist over de conformiteit. Dit recipe volgt examples/32-pdfa4-icc.php.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3composer require nextpdf/proPDF/A-4 is een Pro-functie. Bij een Core-only-installatie werpt enablePdfA() een InvalidConfigException op. Het bericht noemt de ontbrekende security.pdfa-capability en wijst naar de oplossing composer require nextpdf/pro. Voor verificatie heb je een PDF/A-validator op PATH nodig. De voorbeelden gebruiken veraPDF met --flavour 4.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”PDF/A-4 is het ISO 19005-4-archiveringsprofiel op basis van ISO 32000-2 (PDF 2.0). Een conform bestand is kleurdeterministisch en op zichzelf staand. Het declareert een OutputIntent die verwijst naar een ingebed ICC-bestemmingsprofiel, zodat kleur zonder externe bronnen kan worden gereproduceerd (§6.2.3). Elk lettertypeprogramma is ingebed (§6.2.10.4.1). Het document bevat pdfaid-identificatiemetadata in Extensible Metadata Platform (XMP) (§6.7.3). Het bestand is niet versleuteld (§6.6.4 — PDF/A verbiedt de Encrypt-trailersleutel).
NextPDF modelleert PDF/A met de getypeerde ConformanceMode-enum. enablePdfA() instantieert de PdfAManager van Pro en gebruikt standaard ConformanceMode::PdfA4. Tijdens save() neemt de manager de OutputIntent, de ICC-stream en de XMP-uitbreidingsschema’s op. De discriminators pdfaPart() en pdfaConformanceLetter() houden de pdfaid:part / pdfaid:conformance-metadata afgestemd op de geselecteerde variant (basis 4, 4e, 4f). Het basisprofiel stuurt geen pdfa:conformance-letter uit, zoals dat deel vereist.
API-oppervlak
Sectie met titel “API-oppervlak”Het API-oppervlak (application programming interface) wordt gegenereerd op basis van PHPDoc. Gebruik vooral deze toegangspunten:
\NextPDF\Core\Document::createStandalone(): DocumentDocument::enablePdfA(?object $version = null): static\NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool\NextPDF\Conformance\ConformanceMode::PdfA4/PdfA4e/PdfA4fConformanceMode::pdfaPart(): 2|3|4|nullenConformanceMode::pdfaConformanceLetter(): string
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/output/32-pdfa4-icc.pdf';
// Probe before activating a Pro-gated feature so a Core-only install// gets an actionable message instead of a stack trace.$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);}
$doc = Document::createStandalone();$doc->enablePdfA(); // defaults to ConformanceMode::PdfA4$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);$doc->save($out); // PdfAManager emits OutputIntent + ICC + XMP here
echo "Created: output/32-pdfa4-icc.pdf\n";Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”Gebruik dit op zichzelf staande programma in een testharnas. Gebruik in productie het oordeel van de validator als buildpoort. Een geslaagde save() bewijst dat NextPDF de artefacten heeft uitgestuurd; alleen de validator bewijst de conformiteit.
<?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');
if (!CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable()) { fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n"); exit(1);}
try { $doc = Document::createStandalone(); $doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042'); $doc->setLanguage('en'); $doc->addPage(); $doc->setFont('helvetica', '', 12); $doc->cell(0, 10, 'Long-term archival record. PDF/A-4 (ISO 19005-4).', newLine: true);
// Do NOT call setEncryption(): PDF/A prohibits the Encrypt key and // the call raises an incompatibility exception in either order. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
$exitCode = 0;$report = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $report) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming\n";Op een host waarop nextpdf/pro is geïnstalleerd en waarop verapdf het bestand als conform rapporteert, is dit de verwachte standaarduitvoer (STDOUT):
veraPDF PASS — archival.pdf is reported PDF/A-4 conformingOp een Core-only-host eindigt het programma met een niet-nul-status nadat het PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro naar standaardfout (STDERR) heeft geschreven. Als verapdf een probleem rapporteert, eindigt het programma met een niet-nul-status na veraPDF FAILED — output is not PDF/A-4 conforming. De formulering legt het oordeel bij veraPDF; NextPDF stelt geen PDF/A-4-conformiteit vast.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Pro-poort. Bij een Core-only-installatie werpt
enablePdfA()eenInvalidConfigException. Het bericht noemtsecurity.pdfaen de oplossingcomposer require nextpdf/pro. Raadpleeg eerst het register om een duidelijke beheerdersmelding te tonen. - Versleutelingsconflict. Als je
setEncryption(),useAesGcm()ofsetPublicKeyEncryption()aanroept op een PDF/A-document, werpt NextPDF in beide aanroepvolgorden een incompatibiliteitsuitzondering op. PDF/A-4 verbiedt deEncrypt-trailersleutel (ISO 19005-4 §6.6.4). - Conformiteitsvariant. Geef de Pro
PdfAVersiondoor aanenablePdfA()voor4e(engineering, 3D) of4f(bestandsbijlagen). Het basisprofiel stuurt geenpdfa:conformance-letter uit;4e/4fstellenE/Fin. DeConformanceMode-discriminator houdtpdfaid:partconsistent. - Tagging staat los. Het PDF/A-4-basisprofiel behandelt tagging als optioneel. Schakel voor een resultaat dat zowel toegankelijk als geschikt voor archivering is, de getagde modus en PDF/A afzonderlijk in; zie het PDF/UA-2-recipe.
- De poort is de validator. Een geslaagde
save()betekent dat de artefacten zijn uitgestuurd, niet dat het bestand conform is. Stel geen PDF/A-4-conformiteit vast voordat de validator slaagt.
Prestaties
Sectie met titel “Prestaties”De OutputIntent voegt één ICC-profielstream toe (een paar honderd KB voor sRGB) plus het XMP-pakket. Het inbedden van lettertypen domineert de bestandsgrootte wanneer het document niet-base-14-lettertypen gebruikt. Voor typische archiveringsdocumenten blijft het recipe binnen het budget van 2000 ms / 128 MB. Het semantische reproduceerbaarheidsprofiel is van toepassing: vergelijk een validatiegericht resultaat aan de hand van de structurele abstract syntax tree (AST) plus metadata, niet op basis van ruwe bytes.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Gegevenslocatie en PII-beperkingen
Sectie met titel “Gegevenslocatie en PII-beperkingen”Archiveringsuitvoer is van nature langdurig en op zichzelf staand. Persoonsgegevens in de inhoud blijven gedurende de volledige levensduur van het archief bewaard. Het ingebedde ICC-profiel en de metadata reizen met het bestand mee. Pas vóór archivering beleid voor bewaring en minimalisatie toe. PDF/A-4 kent geen redactiesemantiek.
Veilige telemetrie en logboekopschoning
Sectie met titel “Veilige telemetrie en logboekopschoning”Het recipe schrijft alleen een vaste voortgangsregel. veraPDF-uitvoer kan inhoudsfragmenten bevatten; houd validatorlogboeken voor documenten met gevoelige inhoud weg uit gedeelde logbestemmingen.
Dreigingsmodel
Sectie met titel “Dreigingsmodel”PDF/A-4 is een profiel voor archiveringsgetrouwheid, geen controle op integriteit of authenticiteit. Het ondertekent het bestand niet en maakt manipulatie niet zichtbaar. Combineer het met een handtekening wanneer herkomst van belang is. Een afzonderlijk recipe behandelt de handtekening. Versleuteling en PDF/A sluiten elkaar volgens de specificatie uit.
Gedrag in FIPS-modus
Sectie met titel “Gedrag in FIPS-modus”Dit recipe voert geen cryptografische bewerking uit. De Federal Information Processing Standards (FIPS)-modus verandert het gedrag ervan niet. PDF/A-4 verbiedt versleuteling, dus er wordt geen versleutelingsalgoritme geselecteerd.
Conformiteit
Sectie met titel “Conformiteit”| Bewering | Specificatie | Clausule | reference_id |
|---|---|---|---|
| PDF/A-4 vereist een OutputIntent die naar een ingebed ICC-profiel verwijst. | ISO 19005-4 | §6.2.3 | |
| Kleur is apparaatonafhankelijk via het uitvoerbestemmingsprofiel. | ISO 19005-4 | §6.2.4.3 | |
| Elk lettertypeprogramma is ingebed. | ISO 19005-4 | §6.2.10.4.1 | |
| Het document bevat pdfaid-identificatie in XMP. | ISO 19005-4 | §6.7.3 | |
| Versleuteling is verboden in PDF/A-4. | ISO 19005-4 | §6.6.4 | |
| Een validator, niet de producent, beslist over de conformiteit. | ISO 19005-4 | §6.7.3 |
NextPDF produceert uitvoer die bedoeld is om conform te zijn aan PDF/A-4. Ondersteuning is geen conformiteit; een getest profiel is geen certificering. Dit recipe stelt geen conformiteit vast; een onafhankelijke validator, zoals veraPDF, neemt die beslissing. Gebruik dat oordeel als buildpoort.