Salta ai contenuti

Risoluzione dei problemi: errori di convalida PDF/A e PDF/UA

Queste voci riguardano gli errori sollevati dal motore quando deve mantenere un documento all’interno del profilo PDF/A o PDF/UA. I numeri di clausola riportati di seguito sono quelli citati dal motore nel codice sorgente e nei messaggi di eccezione. Questa pagina li parafrasa. Il motore segnala gli errori di profilo che riesce a rilevare, ma non certifica la conformità del documento. Il verdetto autorevole di conformità proviene da un validatore esterno che applica il proprio set di regole.

  • Sintomo. NextPDF\Security\Exception\IncompatiblePdfAModeException con un messaggio che segnala che un’operazione di cifratura è vietata in una modalità PDF/A.
  • Causa probabile. Nella pipeline è stata abilitata una modalità PDF/A ed è stata richiesta anche la cifratura. Il motore cita ISO 19005-{1,2,3,4} §6.1.3: la chiave Encrypt non deve essere presente nel trailer di un file PDF/A. Il motore interpreta questa condizione come un rifiuto assoluto, indipendentemente dall’ordine delle chiamate.
  • Evidenza / diagnosi. getContext() restituisce pdfa_mode e encryption_operation. Il test del percorso di errore tests/SecurityScenarios/PdfAEncryptionRefusalTest.php verifica che il rifiuto si attivi sia quando PDF/A viene abilitato prima sia quando viene abilitato dopo la chiamata di cifratura.
  • Soluzione.
    1. Stabilire quale proprietà deve avere il documento: conformità per l’archiviazione o cifratura.
    2. Per un documento destinato all’archiviazione, rimuovere la chiamata di cifratura.
    3. Per un documento cifrato, rimuovere la chiamata di abilitazione di PDF/A.
    4. Eseguire nuovamente la pipeline.
  • Argomenti correlati. Cifratura e autorizzazioni.
  • Sintomo. Pdf14FeatureRejectedException sollevata durante l’acquisizione dell’immagine, con un messaggio che cita /JPXDecode o /JBIG2Decode e la clausola ISO 19005-1:2005 §6.1.13.
  • Causa probabile. Una build PDF/A-1 ha acquisito un’immagine che utilizza un filtro introdotto dopo PDF 1.4. PDF/A-1 si basa sul set di funzionalità di PDF 1.4, quindi PdfA1FeatureGuard rifiuta JPEG 2000 (/JPXDecode) e JBIG2 (/JBIG2Decode).
  • Evidenza / diagnosi. src/Writer/PdfA1FeatureGuard.php contiene l’elenco dei filtri vietati e solleva l’eccezione con la clausola citata. Il guard rifiuta solo nel profilo PDF/A-1; i profili PDF/A-2, PDF/A-3 e PDF 2.0 consentono tali filtri.
  • Soluzione.
    1. Ricodificare l’immagine di origine senza JPEG 2000 o JBIG2, ad esempio risalvandola come JPEG baseline o come immagine compressa con Flate.
    2. In alternativa, impostare come obiettivo PDF/A-2 o PDF/A-3, che consentono tali filtri.
    3. Eseguire nuovamente la build.
  • Argomenti correlati. Riferimento sulla conformità.
  • Sintomo. Una build PDF/A non supera la fase di convalida dei font; un validatore esterno segnala un font non incorporato.
  • Causa probabile. Un glifo è stato disegnato con un font il cui programma non è stato incorporato. Il contratto del gestore PDF/A stabilisce che ogni font deve essere incorporato; nessun font standard-14 è consentito senza incorporamento.
  • Evidenza / diagnosi. src/Contracts/PdfAManagerInterface.php dichiara validateFont(string $fontName, bool $isEmbedded, array $cmapForward) con la regola documentata «All fonts must be embedded; no standard 14 fonts allowed without embedding.» L’implementazione concreta è fornita in nextpdf/pro.
  • Soluzione.
    1. Identificare il font segnalato come non incorporato.
    2. Configurare quel font con un file di programma incorporabile anziché affidarsi a un font standard-14 integrato.
    3. Per l’interazione con la sostituzione Base 14, consultare la voce relativa a font e tag.
    4. Eseguire nuovamente la build e ripetere la convalida.
  • Argomenti correlati. Font e tag.

Voce: è presente JavaScript e la convalida PDF/A non riesce

Sezione intitolata “Voce: è presente JavaScript e la convalida PDF/A non riesce”
  • Sintomo. Una build PDF/A non supera la convalida JavaScript oppure un validatore esterno segnala un’azione JavaScript.
  • Causa probabile. Il documento, o un campo modulo, contiene un’azione JavaScript. Il contratto del gestore PDF/A cita ISO 19005-4:2020 §6.7.1, che vieta le azioni JavaScript.
  • Evidenza / diagnosi. PdfAManagerInterface::validateNoJavaScript() e validateNoJavaScriptActions() citano entrambe §6.7.1 nei rispettivi docblock.
  • Soluzione.
    1. Rimuovere l’azione JavaScript dal documento o dal campo del modulo.
    2. Se l’azione è necessaria per il comportamento previsto, il documento non può essere PDF/A; produrre una variante non PDF/A per quell’uso.
    3. Eseguire nuovamente la build e ripetere la convalida.
  • Argomenti correlati. Riferimento sulla conformità.
  • Sintomo. Un documento creato con i tag abilitati non viene riconosciuto come PDF/UA-2 oppure la dichiarazione PDF/UA-2 è assente.
  • Causa probabile. L’albero della struttura è vuoto. Il motore non dichiara PDF/UA-2 per un documento privo di struttura con tag, perché un albero della struttura vuoto non soddisfa il profilo.
  • Evidenza / diagnosi. Il test del percorso di errore tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php verifica che un documento con tag vuoto non dichiari PDF/UA-2. Si tratta del comportamento documentato del motore, non di un difetto.
  • Soluzione.
    1. Verificare che il contenuto venga emesso tramite il percorso dei tag, in modo che l’albero della struttura risulti popolato e non vuoto.
    2. Verificare che le sequenze di marked content corrispondano a elementi di struttura.
    3. Eseguire nuovamente la build e ricontrollare lo stato PDF/UA-2.
  • Argomenti correlati. Font e tag.

Voce: PDF/UA-2 non riesce a causa di una lingua mancante o non valida

Sezione intitolata “Voce: PDF/UA-2 non riesce a causa di una lingua mancante o non valida”
  • Sintomo. Un controllo PDF/UA-2 fallisce perché una voce di lingua è assente o non è un tag valido.
  • Causa probabile. Il documento o un elemento di struttura non dispone di una lingua valida. PDF/UA-2 richiede una dichiarazione di lingua naturale; un valore Lang mancante o malformato non supera il controllo rigoroso.
  • Evidenza / diagnosi. Il test del percorso di errore tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php copre il requisito rigoroso sulla lingua. I tag di lingua vengono convalidati tramite src/Accessibility/Bcp47Validator.php; un tag non valido solleva src/Accessibility/InvalidBcp47TagException.php.
  • Soluzione.
    1. Impostare una lingua a livello di documento come tag BCP-47 valido, ad esempio en-US o zh-Hant-TW.
    2. Quando un passaggio è in una lingua diversa, impostare la lingua su quell’elemento di struttura.
    3. Eseguire nuovamente la build e ripetere la convalida.
  • Argomenti correlati. Font e tag.
  • I rifiuti PDF/A e PDF/UA descritti qui vengono prodotti all’interno del motore. Sono indipendenti dal verdetto di un validatore esterno e non lo sostituiscono: eseguire un validatore come veraPDF per ottenere il verdetto autorevole.
  • Il writer concreto per gli oggetti richiesti da PDF/A (flusso di metadati XMP, output intent con un profilo ICC) viene risolto in fase di esecuzione da nextpdf/pro. Con il solo pacchetto core installato, tali oggetti non vengono emessi; una build con il solo core non è un produttore PDF/A completo.
  • Il rifiuto della cifratura è assoluto e indipendente dall’ordine: abilitare PDF/A dopo la chiamata di cifratura solleva comunque il rifiuto.

Glossario: output intent · albero della struttura