Dépannage : échecs de validation PDF/A et PDF/UA
Ces entrées couvrent les échecs signalés par le moteur lorsqu’il maintient un document dans un profil PDF/A ou PDF/UA. Les numéros de clause ci-dessous sont ceux que le moteur cite dans son propre code source et dans ses messages d’exception. Cette page les paraphrase. Le moteur signale les échecs de profil qu’il détecte : il ne certifie pas qu’un document est conforme. Le verdict de conformité qui fait autorité provient d’un validateur externe qui exécute son propre jeu de règles.
Entrée : le chiffrement est refusé sous PDF/A
Section intitulée « Entrée : le chiffrement est refusé sous PDF/A »- Symptôme.
NextPDF\Security\Exception\IncompatiblePdfAModeExceptionavec un message indiquant qu’une opération de chiffrement est interdite dans un mode PDF/A. - Cause probable. Le pipeline a activé un mode PDF/A tout en demandant le chiffrement. Le moteur cite ISO 19005-{1,2,3,4} §6.1.3 : la clé
Encryptne doit pas être présente dans le trailer d’un fichier PDF/A. Le moteur traite cela comme un refus absolu, quel que soit l’ordre des appels. - Preuves / diagnostic.
getContext()renvoiepdfa_modeetencryption_operation. Le test du chemin d’échectests/SecurityScenarios/PdfAEncryptionRefusalTest.phpvérifie que le refus est déclenché, que PDF/A ait été activé avant ou après l’appel de chiffrement. - Résolution.
- Détermine de quelle propriété le document a besoin : conformité d’archivage ou chiffrement.
- Pour un document d’archivage, supprime l’appel de chiffrement.
- Pour un document chiffré, supprime l’appel d’activation de PDF/A.
- Relance le pipeline.
- À lire aussi. Chiffrement et permissions.
Entrée : le filtre d’image est interdit sous PDF/A-1
Section intitulée « Entrée : le filtre d’image est interdit sous PDF/A-1 »- Symptôme.
Pdf14FeatureRejectedExceptionlevée pendant l’ingestion de l’image, avec un message qui nomme/JPXDecodeou/JBIG2Decodeet la clauseISO 19005-1:2005 §6.1.13. - Cause probable. Une build PDF/A-1 a traité une image qui utilise un filtre introduit après PDF 1.4. PDF/A-1 vise l’ensemble de fonctionnalités de PDF 1.4, donc
PdfA1FeatureGuardrejette JPEG 2000 (/JPXDecode) et JBIG2 (/JBIG2Decode). - Preuves / diagnostic.
src/Writer/PdfA1FeatureGuard.phpcontient la liste des filtres interdits et lève l’exception avec la clause citée. Ce garde-fou ne rejette ces filtres que sous le profil PDF/A-1 ; PDF/A-2, PDF/A-3 et le profil PDF 2.0 les autorisent. - Résolution.
- Réencode l’image source sans JPEG 2000 ni JBIG2 — par exemple, ré-enregistre-la en JPEG baseline ou sous forme d’image compressée avec Flate.
- À défaut, vise PDF/A-2 ou PDF/A-3, qui autorisent ces filtres.
- Relance la build.
- À lire aussi. Référence de conformité.
Entrée : une police n’est pas incorporée sous PDF/A
Section intitulée « Entrée : une police n’est pas incorporée sous PDF/A »- Symptôme. Une build PDF/A échoue lors de son étape de validation des polices ; un validateur externe signale une police non incorporée.
- Cause probable. Un glyphe a été tracé avec une police dont le programme n’est pas incorporé. Le contrat du gestionnaire PDF/A stipule que toute police doit être incorporée ; aucune police standard-14 n’est autorisée sans incorporation.
- Preuves / diagnostic.
src/Contracts/PdfAManagerInterface.phpdéclarevalidateFont(string $fontName, bool $isEmbedded, array $cmapForward)avec la règle documentée « All fonts must be embedded ; no standard 14 fonts allowed without embedding. » L’implémentation concrète de cette règle est livrée dansnextpdf/pro. - Résolution.
- Identifie la police signalée comme non incorporée.
- Configure cette police avec un fichier de programme incorporable plutôt que de t’appuyer sur une police standard-14 intégrée.
- Pour comprendre l’interaction avec la substitution Base 14, lis l’entrée sur les polices et le balisage.
- Relance la build et revalide.
- À lire aussi. Polices et balisage.
Entrée : du JavaScript est présent et la validation PDF/A échoue
Section intitulée « Entrée : du JavaScript est présent et la validation PDF/A échoue »- Symptôme. Une build PDF/A échoue à son étape de validation JavaScript, ou un validateur externe signale une action JavaScript.
- Cause probable. Le document, ou un champ de formulaire, contient une action JavaScript. Le contrat du gestionnaire PDF/A cite ISO 19005-4:2020 §6.7.1, qui interdit les actions JavaScript.
- Preuves / diagnostic.
PdfAManagerInterface::validateNoJavaScript()etvalidateNoJavaScriptActions()citent toutes deux §6.7.1 dans leurs docblocks. - Résolution.
- Supprime l’action JavaScript du document ou du champ de formulaire.
- Si l’action est requise pour le fonctionnement attendu, le document ne peut pas être PDF/A ; produis une variante non-PDF/A pour cet usage.
- Relance la build et revalide.
- À lire aussi. Référence de conformité.
Entrée : la sortie balisée ne se déclare pas PDF/UA-2
Section intitulée « Entrée : la sortie balisée ne se déclare pas PDF/UA-2 »- Symptôme. Un document construit avec le balisage activé n’est pas reconnu comme PDF/UA-2, ou la déclaration PDF/UA-2 est absente.
- Cause probable. L’arbre de structure est vide. Le moteur ne déclare pas PDF/UA-2 pour un document qui ne contient aucune structure balisée, car un arbre de structure vide ne satisfait pas le profil.
- Preuves / diagnostic. Le test du chemin d’échec
tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.phpvérifie qu’un document balisé mais vide ne se déclare pas PDF/UA-2. C’est le comportement documenté du moteur, pas un défaut. - Résolution.
- Vérifie que le contenu est émis via le chemin de balisage afin que l’arbre de structure soit renseigné, plutôt que vide.
- Vérifie que les séquences de contenu marqué pointent vers des éléments de structure.
- Relance la build et revérifie le statut PDF/UA-2.
- À lire aussi. Polices et balisage.
Entrée : PDF/UA-2 échoue sur une langue manquante ou invalide
Section intitulée « Entrée : PDF/UA-2 échoue sur une langue manquante ou invalide »- Symptôme. Une vérification PDF/UA-2 échoue parce qu’une entrée de langue manque ou n’est pas une balise valide.
- Cause probable. Le document ou un élément de structure ne déclare pas de langue valide. PDF/UA-2 exige une déclaration de langue naturelle ; une valeur
Langmanquante ou mal formée fait échouer la vérification stricte. - Preuves / diagnostic. Le test du chemin d’échec
tests/Unit/Conformance/PdfUa2Section844LangStrictTest.phpteste l’exigence stricte de langue. Les balises de langue sont validées viasrc/Accessibility/Bcp47Validator.php; une balise invalide entraînesrc/Accessibility/InvalidBcp47TagException.php. - Résolution.
- Définis une langue au niveau du document sous la forme d’une balise BCP-47 valide, par exemple
en-USouzh-Hant-TW. - Lorsqu’un passage est rédigé dans une autre langue, définis la langue sur cet élément de structure.
- Relance la build et revalide.
- Définis une langue au niveau du document sous la forme d’une balise BCP-47 valide, par exemple
- À lire aussi. Polices et balisage.
Cas limites et pièges
Section intitulée « Cas limites et pièges »- Les refus PDF/A et PDF/UA décrits ici sont émis par le moteur lui-même. Ils sont indépendants du verdict d’un validateur externe et ne le remplacent pas — exécute un validateur tel que veraPDF pour obtenir le résultat qui fait autorité.
- Le writer concret chargé des objets requis par PDF/A (flux de métadonnées XMP, output intent avec un profil ICC) est résolu à l’exécution depuis
nextpdf/pro. Avec le seul package cœur installé, ces objets ne sont pas émis ; une build avec le cœur seul n’est pas un producteur PDF/A complet. - Le refus de chiffrement est absolu et indépendant de l’ordre — activer PDF/A après l’appel de chiffrement déclenche quand même le refus.
Voir aussi
Section intitulée « Voir aussi »Glossaire : output intent · arbre de structure