Salta ai contenuti

Conformità PDF/A-4: che cosa emette NextPDF per ISO 19005-4

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à».

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

La 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.

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 AIIM pdfaid), che contiene pdfaid:part/pdfaid:rev. PDF/A-4e e PDF/A-4f impostano inoltre pdfa:conformance (E / F). Il §6.7.3 stabilisce inoltre che un file non conforme a nessuno dei due non deve fornire un valore pdfa: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.

MetodoEffetto
enablePdfA(?object $version = null): staticInstrada verso ConformanceMode::PdfA4/PdfA4e/PdfA4f; pianifica OutputIntent + ICC + XMP in save(). Genera InvalidConfigException|PageLayoutException|CompressionException se nextpdf/pro è assente.
ConformanceMode::pdfaPart(): ?intRestituisce la parte ISO 19005 per la modalità attiva (4 per PdfA4*).
ConformanceMode::pdfaConformanceLetter(): stringRestituisce la lettera pdfa:conformance (E / F) oppure una stringa vuota.
<?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";

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.

  • 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 chiamare setEncryption() 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 case ConformanceMode lo impedisce per costruzione.
  • Allegati PDF/A-4f. I file incorporati in un file PDF/A-4f devono contenere le chiavi F e UF (Desc consigliata) ai sensi del §6.7.5. Questo è il presupposto del percorso ibrido ZUGFeRD/Factur-X.

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.

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.

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.

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.

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.

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.

AffermazioneSpecificaClausolareference_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.