Salta ai contenuti

ISO 19005-4 (PDF/A-4): mappatura delle funzionalità NextPDF

ISO 19005-4:2020 (PDF/A-4) è il profilo di archiviazione per PDF 2.0. Questa pagina ne mappa il supporto in NextPDF in modo trasparente: cosa emette Core, cosa aggiunge l’estensione nextpdf/pro e cosa NextPDF non copre esplicitamente. NextPDF emette strutture pertinenti a PDF/A-4; solo un validatore può attestare che un file sia conforme.

Terminal window
composer require nextpdf/core:^3
# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:
# composer require nextpdf/pro

ISO 19005-4:2020 si basa su ISO 32000-2:2020 (PDF 2.0), a differenza di PDF/A-2 e PDF/A-3, che si basano su ISO 32000-1:2008 (PDF 1.7). NextPDF codifica questa differenza di lineage in ConformanceMode::requiresPdf17(). Questo metodo restituisce false per tutti i casi PDF/A-4 e true per PDF/A-2 e PDF/A-3.

PDF/A-4 definisce tre forme di conformità. Il profilo base non ha alcuna lettera pdfa:conformance. PDF/A-4e (Annex B, contenuti tecnici / 3D) imposta pdfa:conformance = E. PDF/A-4f (Annex A, file incorporati) imposta pdfa:conformance = F. ISO 19005-4:2020 §6.7.3 specifica lo schema di identificazione PDF/A nello spazio dei nomi AIIM. Stabilisce che un file non conforme né a PDF/A-4e né a PDF/A-4f non fornisce alcuna voce pdfa:conformance. NextPDF lo rispecchia esattamente in ConformanceMode::pdfaConformanceLetter(): PdfA4 restituisce la stringa vuota, PdfA4e restituisce E, PdfA4f restituisce F.

Il confine critico tra le edizioni è questo: l’authoring di file PDF/A-4 — il dizionario OutputIntent, il profilo ICC incorporato, lo schema di estensione XMP, le garanzie di subset dei font e il divieto di cifratura — è implementato nel PdfAManager Enterprise. Il PdfAManager Enterprise è incluso nell’estensione nextpdf/pro. In un’installazione solo Core, Document::enablePdfA() solleva InvalidConfigException perché la capability security.pdfa non è registrata. L’esempio eseguibile (examples/32-pdfa4-icc.php) lo dimostra interrogando il registry delle capability e gestendo il fallback con un messaggio chiaro, invece che con uno stack trace.

Pertanto, con il solo Core, la superficie PDF/A-4 si limita al discriminatore: NextPDF registra quale variante PDF/A-4 dichiara un documento. NextPDF emette i marcatori pdfaid:part = 4 / pdfa:conformance definiti dallo schema. Produrre un file PDF/A-4 completo — e validarne la conformità — sono passaggi distinti. Il primo passaggio richiede nextpdf/pro. Il secondo passaggio richiede veraPDF.

SuperficieEdizioneCosa fornisce
ConformanceMode::PdfA4 / PdfA4e / PdfA4fcoreIl discriminatore di variante
ConformanceMode::pdfaPart()4coreNumero di parte ISO 19005
ConformanceMode::pdfaConformanceLetter()'' / 'E' / 'F'coreLettera di conformità §6.7.3
ConformanceMode::requiresPdf17()falsecoreGate per il lineage PDF 2.0
Document::enablePdfA()proAuthoring di OutputIntent + ICC + XMP; solleva InvalidConfigException in Core
<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.
$mode = ConformanceMode::PdfA4f;
$mode->pdfaPart(); // 4
$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)
$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)
<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Exception\InvalidConfigException;
use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a
// Core-only install gets a clear rationale, not a stack trace.
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
throw new InvalidConfigException(
configKey: 'security.pdfa',
givenValue: 'Core-only install',
expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)',
);
}
$doc = Document::createStandalone();
$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).
// … write content …
$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven
// until veraPDF asserts it:
//
// verapdf --flavour 4 out/archive-a4.pdf
  • Core non può eseguire l’authoring di un file PDF/A-4. enablePdfA() solleva un’eccezione in Core. Solo il discriminatore e i marcatori XMP rientrano nella superficie Core.
  • Il PDF/A-4 base non emette alcun pdfa:conformance. Ai sensi di ISO 19005-4:2020 §6.7.3, solo PDF/A-4e e PDF/A-4f impostano la lettera. ConformanceMode::PdfA4 restituisce la stringa vuota per progettazione.
  • Lineage PDF 2.0, non PDF 1.7. Un errore comune è riutilizzare una pipeline PDF/A-3 che si aspetta %PDF-1.7. PDF/A-4 è PDF 2.0; requiresPdf17() restituisce false in tutti i casi PDF/A-4.
  • La validazione ICC è Premium. La validazione ICC dell’OutputIntent secondo ISO 19005-4:2020 §6.2.2 (magic acsp, tabella dei tag, punto di bianco D50) spetta al PdfAManager Enterprise, non a Core.
  • La libreria non certifica il file. Impostare PdfA4f ed emettere i marcatori non rende l’output un file PDF/A-4f valido. Eseguire veraPDF.

La superficie PDF/A-4 di Core consiste in pura introspezione di value-type (dispatch enum match, O(1), nessuna allocazione). Il percorso di authoring Premium aggiunge l’OutputIntent e il pacchetto ICC alla scrittura. Il costo corrisponde alla dimensione del profilo incorporato, gestita all’interno del budget del writer. La validazione veraPDF è un passaggio out-of-band, non fa parte della generazione.

PDF/A-4 vieta la cifratura. Il PdfAManager Enterprise applica l’invariante del divieto di cifratura. Il PdfAManager Enterprise ordina l’applicazione di questa invariante rispetto a enablePdfA() in modo che un chiamante non possa combinare accidentalmente AES-GCM con la modalità di archiviazione. Il forward-guard di Core in HasSecurity::enablePdfA() rifiuta la combinazione non supportata prima che venga scritto alcun byte. Per i dettagli sulla pipeline di archiviazione, consultare il threat model del progetto.

Questa è una mappatura delle funzionalità, non una dichiarazione di conformità.

Area ISO 19005-4:2020ClausolaCopertura NextPDFStato
Schema di identificazione della variante§6.7.3ConformanceMode emette pdfaid:part = 4 e la lettera pdfa:conformance corrispondenteDichiarato (Core; testato a livello di unità in tests/Unit/Conformance/)
Gate per il lineage PDF 2.0§6.7.3 / baserequiresPdf17() restituisce false per tutti i casi PDF/A-4Verificato (testato a livello di unità)
OutputIntent + ICC incorporato§6.2.2Enterprise PdfAManager (nextpdf/pro)Solo Premium (non Core)
Schema di estensione XMP, subsetting dei font, divieto di cifratura§6 / Annex A/BEnterprise PdfAManager (nextpdf/pro)Solo Premium (non Core)
Determinazione della conformitàClausola 5Non eseguita da NextPDF — veraPDFEsplicitamente non coperta

Il supporto non equivale alla conformità — e questa pagina separa deliberatamente i due concetti. (a) NextPDF Core emette le strutture che ISO 19005-4:2020 §6.7.3 definisce per l’identificazione della variante — si tratta di implementazione, comprovata da tests/Unit/Conformance/ConformanceModePdfAVariantTest.php (superato). (b) Che un file sia conforme a PDF/A-4 è un’asserzione distinta che solo un validatore può formulare, ai sensi di ISO 19005-4:2020 Clausola 5. La Clausola 5 stabilisce che l’effettiva determinazione della conformità viene eseguita da uno strumento di verifica rispetto ai requisiti normativi. NextPDF formula l’affermazione (a). NextPDF non formula l’affermazione (b). Validare con veraPDF (verapdf --flavour 4 …, oppure php oracle/run.php per l’harness dell’oracolo — eseguito solo quando il binario veraPDF è presente, con gate opt-in).

Le espressioni «PDF/A-4 compliant», «fully conformant» e «PDF/A-4 certified» sono deliberatamente assenti da questa pagina. NextPDF emette strutture pertinenti a PDF/A-4; non garantisce un file conforme.

Le citazioni sono parafrasate dal corpus di conformità di NextPDF. I digest completi reference_id da 64 caratteri sono registrati nel front matter della pagina e in docs/public/modules/core/_normative-evidence-conf.md.