Conformità PDF/A-4: che cosa emette NextPDF per ISO 19005-4
In breve
Sezione intitolata “In breve”Dichiarazione di confine. NextPDF produce un output destinato a essere conforme a PDF/A-4; la libreria non ne attesta la conformità: questo spetta a un validatore (per esempio, veraPDF).
PDF/A-4 è ISO 19005-4:2020, il profilo di archiviazione basato su PDF 2.0. NextPDF Core propaga il discriminatore ConformanceMode (PdfA4, PdfA4e, PdfA4f). Il motore Premium nextpdf/pro emette l’OutputIntent, il profilo ICC incorporato e lo schema di identificazione XMP pdfaid durante save(). La libreria produce gli artefatti; veraPDF decide la conformità. ISO 19005-4 §6.7.3 è esplicito: le proprietà pdfaid:part/pdfaid:rev «non determinano di per sé la conformità».
Installazione
Sezione intitolata “Installazione”composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringLa capacità security.pdfa di Core è registrata, ma non è disponibile senza nextpdf/pro. enablePdfA() genera quindi InvalidConfigException indicando un percorso di aggiornamento, anziché emettere un file non conforme.
Panoramica concettuale
Sezione intitolata “Panoramica concettuale”Document::enablePdfA(?object $version = null) mappa un valore di input dell’enum PdfAVersion a un case ConformanceMode. Per un input non riconosciuto usa per impostazione predefinita ConformanceMode::PdfA4 ('4e' → PdfA4e, '4f' → PdfA4f). La modalità determina tre obblighi di emissione che lo standard impone a un file conforme:
- OutputIntent + ICC — §6.2.3 consente a un file conforme di specificare le proprie caratteristiche cromatiche con un OutputIntent PDF/A-4 che fa riferimento a un flusso ICC
DestOutputProfile. Ai sensi del §6.2.4.1, questa è una delle due vie consentite verso il colore indipendente dal dispositivo (l’altra è la specifica diretta di spazi di colore indipendenti dal dispositivo). L’OutputIntent è quindi la via scelta da NextPDF, non un requisito incondizionato dello standard. - Identificazione
pdfaid— §6.7.3 richiede lo schema di identificazione PDF/A nell’XMP a livello di documento (lo spazio dei nomi AIIMpdfaid), che contienepdfaid:part/pdfaid:rev. PDF/A-4e e PDF/A-4f impostano inoltrepdfa:conformance(E / F). Il §6.7.3 stabilisce inoltre che un file non conforme a nessuno dei due non deve fornire un valorepdfa:conformance. - Incorporamento dei font — §6.2.10 richiede che tutti i font usati per il rendering siano incorporati.
NextPDF li emette; non esegue la determinazione di conformità del §5. Questo compito spetta a veraPDF, e il §6.7.3 riserva la determinazione a tale processo.
Superficie API
Sezione intitolata “Superficie API”| Metodo | Effetto |
|---|---|
enablePdfA(?object $version = null): static | Instrada verso ConformanceMode::PdfA4/PdfA4e/PdfA4f; pianifica OutputIntent + ICC + XMP in save(). Genera InvalidConfigException|PageLayoutException|CompressionException se nextpdf/pro è assente. |
ConformanceMode::pdfaPart(): ?int | Restituisce la parte ISO 19005 per la modalità attiva (4 per PdfA4*). |
ConformanceMode::pdfaConformanceLetter(): string | Restituisce la lettera pdfa:conformance (E / F) oppure una stringa vuota. |
Esempio di codice — Avvio rapido
Sezione intitolata “Esempio di codice — Avvio rapido”<?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";Esempio di codice — Produzione
Sezione intitolata “Esempio di codice — Produzione”Incapsulare il verdetto del validatore come gate di build. Eseguire verapdf --flavour 4 sull’output e far fallire la build in caso di uscita diversa da zero. Il verdetto del validatore è il gate: l’emissione della libreria ne è l’input, mai il verdetto stesso. Vedere /cookbook/php/pdfa4-conformance-gate/ per la pipeline completa con gate.
Casi limite e insidie
Sezione intitolata “Casi limite e insidie”- Abilitare prima del contenuto. Chiamare
enablePdfA()prima di aggiungere contenuto; l’abilitazione retroattiva non rielabora gli oggetti già scritti. - Nessuna cifratura. PDF/A vieta la chiave
Encrypt. Non chiamaresetEncryption()su un documento PDF/A. La cifratura riguarda la riservatezza, non l’integrità di archiviazione, e in questo profilo le due cose si escludono a vicenda. pdfa:conformanceè condizionale. Solo PDF/A-4e e PDF/A-4f lo impostano. Emetterlo su un file PDF/A-4 semplice è di per sé una violazione della conformità (§6.7.3) — il caseConformanceModelo impedisce per costruzione.- Allegati PDF/A-4f. I file incorporati in un file PDF/A-4f devono contenere le chiavi
FeUF(Desc consigliata) ai sensi del §6.7.5. Questo è il presupposto del percorso ibrido ZUGFeRD/Factur-X.
Prestazioni
Sezione intitolata “Prestazioni”L’incorporamento di OutputIntent + ICC aggiunge un flusso ICC di dimensione fissa (il profilo dello spazio di lavoro) e il pacchetto XMP in save(). Per un documento tipico, la stima è tempo ≤ 1500 ms e picco ≤ 128 MB.
Note di sicurezza
Sezione intitolata “Note di sicurezza”PDF/A-4 vieta la cifratura. Il profilo è un vincolo di archival/longevity, non un controllo di sicurezza. La custodia delle chiavi e la policy del verificatore sono fuori dall’ambito di questo profilo; vedere il trust center.
Residenza dei dati e mitigazioni PII
Sezione intitolata “Residenza dei dati e mitigazioni PII”L’emissione PDF/A-4 avviene in-process e scrive soltanto il documento, il profilo ICC incorporato e il pacchetto XMP. Nessun contenuto esce dal processo. I dati personali (PII) nel contenuto di origine sono responsabilità dell’integratore: il profilo non esegue alcun oscuramento.
Telemetria sicura e pulizia dei log
Sezione intitolata “Telemetria sicura e pulizia dei log”L’esempio scrive su STDERR solo il percorso di output e il comando del validatore. Nessun byte del documento viene registrato nei log. La ricetta rispetta NEXTPDF_COOKBOOK_OUTPUT e non emette mai il PDF su STDOUT.
Modello di minaccia
Sezione intitolata “Modello di minaccia”Un file PDF/A-4 non è soggetto a controllo degli accessi. Chiunque possieda il file può leggerlo; il profilo garantisce la longevità del rendering, non la riservatezza. Trattare il flusso ICC dell’OutputIntent come pubblico.
Comportamento in modalità FIPS
Sezione intitolata “Comportamento in modalità FIPS”L’emissione PDF/A-4 non esegue alcuna crittografia. Una firma digitale su un file PDF/A-4 (il §6.5 di PDF/A-4 consente i profili PAdES) è una questione separata, a carico della ricetta di firma, e ne eredita la posizione FIPS. Questa pagina non formula alcuna affermazione sulla firma.
Conformità
Sezione intitolata “Conformità”| Affermazione | Specifica | Clausola | reference_id |
|---|---|---|---|
| Un file PDF/A-4 può specificare le proprie caratteristiche cromatiche con un OutputIntent PDF/A che fa riferimento a un profilo ICC DestOutputProfile. | ISO 19005-4 | §6.2.3 | |
| Il colore indipendente dal dispositivo può essere specificato direttamente o indirettamente tramite il DestOutputProfile dell’OutputIntent (una delle due vie consentite). | ISO 19005-4 | §6.2.4.1 | |
| La versione PDF/A è identificata tramite lo schema di identificazione PDF/A (pdfaid) nell’XMP del documento. | ISO 19005-4 | §6.7.3 | |
| pdfaid:part / pdfaid:rev non determinano di per sé la conformità; la determinazione è eseguita ai sensi della Clausola 5. | ISO 19005-4 | §6.7.3 | |
| Un file non conforme né a PDF/A-4e né a PDF/A-4f non deve fornire un valore pdfa:conformance. | ISO 19005-4 | §6.7.3 | |
| I file incorporati in PDF/A-4f richiedono le chiavi F e UF (Desc consigliata). | ISO 19005-4 | §6.7.5 | |
| Tutti i font usati per il rendering devono essere incorporati. | ISO 19005-4 | §6.2.10 | |
| L’uso di trasparenza / colore dipende dalla dichiarazione di un OutputIntent. | ISO 19005-4 | §6.2.9 |
Le citazioni sono puntatori clause-id + reference_id nel corpus di verifica. Non viene riprodotto alcun testo degli standard; le clausole sono riassunte con parole di NextPDF.