Blog

PDF/A-3 spiegato: e come verificare che il file sia davvero conforme

PDF/A-3 è il profilo PDF/A comune che consente allegati legali, base dell’e-invoicing Factur-X / ZUGFeRD. Differenze, controlli e validazione a due motori.

PDF/A è la variante archivistica di PDF: la promessa che un documento verrà renderizzato nel 2050 come nel 2026. Esistono quattro profili principali (PDF/A-1, 2, 3, 4), ciascuno con livelli di conformità. PDF/A-3 è il profilo che rende possibile l’e-invoicing europeo, ed è l’unico profilo PDF/A di uso diffuso che permette allegati arbitrari dentro il wrapper d’archivio.

Se lavori con fatture, invii regolatori o qualunque workflow “PDF + structured data”, incontrerai PDF/A-3. Ecco cosa significa, come differisce dagli altri profili e come verificare la conformità reale.

La famiglia PDF/A in breve

ProfiloISO partAnnoCaratteristica
PDF/A-119005-12005Primo profilo d’archivio. Niente transparency, niente JavaScript, font embedded.
PDF/A-219005-22011Aggiunge JPEG2000, transparency e layer support. Migliore print fidelity.
PDF/A-319005-32012Aggiunge embedded file attachments. Wrapper per Factur-X / ZUGFeRD.
PDF/A-419005-42020Revisione moderna; conformance model più pulito, senza split b vs a.

I sotto-livelli:

  • b (basic): preserva la fedeltà visiva, senza garanzie semantiche.
  • a (accessible): structure tagging e Unicode mapping per screen reader.
  • u (Unicode): Unicode mapping senza struttura completa.
  • e / f (solo PDF/A-4): engineering 3D content e full forms.

“PDF/A-3b” significa: profilo archivistico 3 con allegati permessi, livello basic senza obbligo di tagging accessibile. È la variante più comune per la fatturazione.

Cosa rende speciale PDF/A-3

PDF/A-1 e PDF/A-2 vietano embedded files arbitrari. Il motivo è archivistico: un PDF d’archivio deve essere self-contained; un allegato come data.xlsx potrebbe degradarsi separatamente dal PDF e rompere la garanzia.

PDF/A-3 allenta la regola con una condizione stretta: ogni embedded file deve dichiarare AFRelationship, cioè il rapporto con il contenuto visibile del PDF. Valori validi: Source, Data, Alternative, Supplement, Unspecified. Il PDF deve anche elencare l’allegato nell’array /AF ed emettere XMP metadata sul file allegato.

In pratica: PDF/A-3 permette allegati, ma chiede di dichiarare esattamente cosa sono e come si collegano a ciò che vede l’utente. Questa dichiarazione è la base dell’e-invoicing: la fattura leggibile sta nel PDF, l’EN 16931 CII XML leggibile dalle macchine sta nell’allegato, e AFRelationship="Alternative" indica che sono due rappresentazioni della stessa fattura.

Dove vive PDF/A-3 in produzione

  • Factur-X (Francia, B2B obbligatorio progressivamente dal 2026): PDF/A-3 + CII XML, con XMP namespace urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#.
  • ZUGFeRD 2.x (Germania, ricezione obbligatoria dal 2025): PDF/A-3 + CII XML, con XMP namespace urn:zugferd:pdfa:CrossIndustryDocument:invoice:2p0#.
  • Archivio CAD engineering: PDF/A-3 con file CAD nativo allegato. Il PDF è il rendering, il CAD è la source.
  • Invii regolatori: PDF/A-3 con XML payloads allegati, come FDA submissions o ESEF financial reports di issuer UE.

In questi casi il wrapper non è solo un container. È un contract: PDF e file allegato rappresentano lo stesso documento e devono validare entrambi.

Come verificare la conformità PDF/A-3

Il checker ufficiale è veraPDF (verapdf.org), mantenuto dalla PDF Association. Implementa il rule set ISO 19005-3; se veraPDF riporta “Pass — PDF/A-3b”, è il segnale più forte che un singolo engine possa dare.

Ma un “Pass” single-engine non è audit-grade standard (Why two PDF/A validators are better than one spiega perché). Il pattern robusto è eseguire due independent engines e considerare il file conforme solo quando entrambi passano.

Per un’e-invoice serve anche Mustang (mustangproject.org), il checker de-facto per Factur-X / ZUGFeRD. Mustang valida il CII XML embedded contro EN 16931 Schematron. La conformità PDF/A-3 da sola non basta; anche l’XML allegato deve essere EN 16931 valido, altrimenti l’AP system del destinatario rifiuta la fattura.

Molti team installano Java, veraPDF CLI e Mustang, poi scrivono uno shell script che unisce gli output. Funziona, ma aggiunge attrito.

validator esegue tutti e tre nel browser:

  1. veraPDF: reference ufficiale per PDF/A-3 conformance.
  2. gPdf Rust+WASM edge engine: implementazione indipendente, second opinion.
  3. Mustang: EN 16931 CII XML Schematron per embedded e-invoice payloads.

Trascina il file, i tre engine girano in parallelo e i report tornano affiancati. JSON scaricabile per QA evidence. Nessun login, nessuna quota.

Cosa guardare nel report

I failure ricadono spesso qui:

  • Embedded file metadata missing: manca l’array /AF, oppure il file embedded non è listed.
  • AFRelationship missing or wrong: per e-invoice deve essere Alternative; molte PDF libraries usano Source o Data di default.
  • XMP namespace missing or wrong: Factur-X e ZUGFeRD hanno URI specifici; un carattere errato basta per fallire.
  • Fonts not subsetted or not embedded: PDF/A richiede che tutti i glyphs usati siano embedded con il font.
  • Output intent missing: PDF/A richiede un’intenzione colore (sRGB o altro ICC profile), anche per testo nero su bianco.
  • Document metadata incomplete: /Title, /Producer, /CreationDate devono essere presenti nell’information dictionary.

Il report di solito punta alla sezione specifica della spec. Correggi alla fonte; se generi con gPdf, l’API gestisce questi dettagli e validator diventa la tua ricevuta pubblica.

TL;DR

PDF/A-3 = PDF/A-2 + possibilità di incorporare legalmente file arbitrari. È questa capacità che rende praticabile l’e-invoicing UE: fattura leggibile + XML CII EN 16931 strutturato in un unico archival wrapper. Devono passare sia il PDF/A-3 wrapper sia l’XML allegato.

Genera con POST /api/v1/e-invoice/render. Verifica su validator. Tre engine (veraPDF + gPdf edge + Mustang), un upload, gratis.