Skip to content

Archiviazione PDF/A-4

Pro — Commercial License Required
Le funzionalità conformità PDF/A-4 richiedono il pacchetto Pro.

TCPDF-Next Pro implementa la conformità PDF/A-4 (ISO 19005-4:2020), lo standard archiviale più recente basato su PDF 2.0.

Classi Archive

ClasseScopo
PdfAManagerAbilita, valida e impone conformità PDF/A-4
PdfAVersionEnum: A4, A4f, A4e
XmpMetadataDublin Core, XMP Basic, identificazione PDF/A
OutputIntentProfili colore sRGB e ICC personalizzati
IccProfilesRGB.icc incluso e caricamento profili personalizzati

PdfAVersion

LivelloCaso d'UsoFile Incorporati3D / Rich Media
A4Archiviazione standardNoNo
A4fDocumenti con allegatiNo
A4eDocumenti ingegneristici

Abilitare PDF/A-4

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Pro\Archive\{PdfAManager, PdfAVersion, OutputIntent};

$pdf = Document::create()
    ->metadata(title: 'Rapporto Annuale 2026', author: 'Finanza')
    ->addPage()
    ->font('NotoSans', size: 12)
    ->text('Documento conforme PDF/A-4.');

PdfAManager::enable($pdf, PdfAVersion::A4)
    ->outputIntent(OutputIntent::srgb());

$pdf->save('/archive/report.pdf');

OutputIntent e IccProfile

PDF/A richiede almeno un output intent. Usa metodi factory integrati o carica profili ICC personalizzati:

php
use Yeeefang\TcpdfNext\Pro\Archive\{OutputIntent, IccProfile};

OutputIntent::srgb();       // display schermo (più comune)
OutputIntent::fogra39();    // offset patinato europeo
OutputIntent::gracol2006(); // stampa commerciale USA

// Profilo ICC personalizzato
$custom = new OutputIntent(
    subtype: 'GTS_PDFA1', outputConditionIdentifier: 'Custom_CMYK',
    info: 'Profilo stampa interno', registryName: 'https://printing.example.com/profiles',
    iccProfile: IccProfile::load('/profiles/custom.icc')->bytes(),
);

XmpMetadata

I metadati XMP sono generati automaticamente quando PDF/A è abilitato. Aggiungi proprietà personalizzate:

php
$xmp = $pdf->xmpMetadata();
$xmp->set('dc:rights', 'Copyright 2026 Acme Corporation');
$xmp->registerNamespace('acme', 'https://acme.example.com/xmp/1.0/');
$xmp->set('acme:DocumentId', 'DOC-2026-0042');

Regole Validazione

RegolaRequisito
Output intentAlmeno uno richiesto
Incorporamento fontTutti i font devono essere incorporati (no base-14)
CrittografiaNon permessa
JavaScriptNon permesso
Spazio coloreIndipendente dispositivo o coperto da output intent
Metadati XMPDevono essere presenti e consistenti

Modalità Enforcement

Cattura violazioni immediatamente quando si verificano:

php
$manager = PdfAManager::enable($pdf, PdfAVersion::A4);
$manager->enforce(true);

$pdf->javascript(trigger: 'open', script: 'app.alert("Hello");');
// -> PdfAException: "PDF/A-4 violation: JavaScript actions are not permitted."

Validazione Manuale

php
$result = $manager->validate();
foreach ($result->violations() as $v) {
    echo "{$v->severity()}: {$v->message()} [{$v->clause()}]\n";
}

Combinare PDF/A-4 con PAdES B-LTA

php
use Yeeefang\TcpdfNext\Pro\Security\Signature\{DigitalSigner, CertificateInfo};
use Yeeefang\TcpdfNext\Pro\Security\Timestamp\TsaClient;
use Yeeefang\TcpdfNext\Contracts\Enums\SignatureLevel;

PdfAManager::enable($pdf, PdfAVersion::A4)
    ->outputIntent(OutputIntent::srgb());

$signer = new DigitalSigner(
    CertificateInfo::fromPkcs12('/certs/archive.p12', 'pw')
);
$signer->level(SignatureLevel::PAdES_B_LTA);
$signer->timestampAuthority(new TsaClient('https://tsa.example.com/timestamp'));

$signer->sign($pdf);
$pdf->save('/archive/signed-archival.pdf');

Prossimi Passi

Rilasciato sotto licenza LGPL-3.0-or-later.