CheckFileCompliance
Conformité, inspection de documents
Sélection du profil de lecteur PDF/UA
Les contrôles PDF/UA sélectionnent la partie 2 lorsque le XMP identifie pdfuaid:part=2 et conservent sinon les contrôles de la partie 1 ; les contrôles PDF/UA-1 historiques décrits ici ne sont nullement implicites pour la partie 2
Le profil PDF/UA-2 implémente les contrôles de base d’identification, d’espaces de noms, de rôles et de structure ; les rapports structurés utilisent PDF/UA-2 et ISO 14289-2 et indiquent fullCertification=false ainsi que le périmètre non vérifié
Utilisez CheckFilePDFUACompliance ou RunPDFUAValidationPipelineTask pour forcer une partie cible, et GetPDFUAReadValidationCoverageJSON pour inspecter les limites de capacités
Description
Lit un fichier PDF externe et le valide par rapport à une norme de conformité ISO choisie. La valeur renvoyée vaut soit zéro (le fichier passe proprement le test choisi), soit un handle StringListID non nul qui recense chaque anomalie détectée. Chaque entrée de la liste est un code court, deux-points, et un message lisible — exactement le même format de code que celui utilisé par GetPDFUADiagnostics. Énumérez le résultat avec GetStringListCount et GetStringListItemLe test PDF/A couvre les six modes de conformité (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) et lit les entrées XMP
pdfaid:part/pdfaid:conformance pour décider quel jeu de règles appliquerLe test PDF/UA-1 (ajouté en v3.56.0) vérifie un PDF externe par rapport à ISO 14289-1 et émet des codes de diagnostic dans la plage
10xxx afin qu'ils restent visuellement séparés des codes PDF/A 00xxx
Syntaxe
Delphi
Function TPDFlib.CheckFileCompliance(Const InputFileName, Password: WideString; ComplianceTest, Options: Integer): Integer;
ActiveX
Function PDFlib::CheckFileCompliance(InputFileName As String, Password As String, ComplianceTest As Long, Options As Long) As Long
DLL
int DLCheckFileCompliance(int InstanceID, const wchar_t * InputFileName, const wchar_t * Password, int ComplianceTest, int Options);
Paramètres
| InputFileName | Chemin complet du fichier PDF à valider. Le fichier est ouvert en lecture seule et n'est pas modifié. |
|---|---|
| Password | Mot de passe utilisé pour ouvrir le fichier. Passez une chaîne vide pour les documents non chiffrés. Notez qu'un document chiffré échoue au test PDF/A (code 00006), que le mot de passe correct soit fourni ou non — PDF/A interdit le chiffrement. |
| ComplianceTest | La norme à vérifier. 1 — PDF/A (ISO 19005-1/-2/-3, les six niveaux de conformité). 2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessible). 3 — PDF/X (ISO 15930, y compris la famille PDF/X-6). 4 — PDF/VT-3 (ISO 16612-3:2020 sur une base de la famille PDF/X-6). 5 — PDF/R-1, échange raster restreint. 6 — PDF/VCR-1, gabarits de remplacement à contenu variable. 7 — PDF/E-1, échange de documents d'ingénierie. |
| Options | Indicateurs binaires modifiant le test. 0 — Par défaut : signaler chaque anomalie trouvée dans le document. 1 — S'arrêter après la première anomalie et renvoyer immédiatement. Utile lorsque l'appelant n'a besoin que d'un signal réussite/échec. |
Valeurs de retour
| 0 | Le fichier est conforme à la norme choisie. |
|---|---|
| Non-zero | Un handle StringListID dont les entrées décrivent chaque non-conformité détectée. Le handle reste valide jusqu'à la fermeture du document ou jusqu'à l'appel de ReleaseStringList. |
Codes d'anomalie PDF/A (ComplianceTest = 1)
| 00002 | La version PDF dépasse le maximum autorisé par le niveau de conformité (PDF/A-1 plafonne à 1.4 ; PDF/A-2 et PDF/A-3 plafonnent à 1.7). La ligne de détail nomme la version en cause et le maximum autorisé. |
|---|---|
| 00003 | Le catalogue contient /OCProperties (contenu facultatif / calques), interdit par PDF/A-1. PDF/A-2 et PDF/A-3 autorisent les calques et ne déclenchent pas ce contrôle. |
| 00005 | La paire XMP pdfaid:part+pdfaid:conformance est absente, mal formée, ou contient une valeur hors de l'ensemble légal 1A, 1B, 2A, 2B, 3A, 3B. La bibliothèque ne peut pas déterminer quel jeu de règles appliquer, si bien que l'anomalie est signalée comme fatale indépendamment de Options. |
| 00006 | Le document est chiffré. PDF/A interdit le chiffrement dans toutes ses parties. |
| 00007 | Le catalogue n'a pas d'entrée /OutputIntents. Toutes les parties PDF/A exigent une intention de sortie afin que l'espace colorimétrique de rendu soit défini sans ambiguïté. |
| 00011 | Le catalogue n'a pas d'entrée /MarkInfo. Requis uniquement pour la conformité de niveau a (PDF/A-1a, 2a, 3a) — le PDF balisé doit se déclarer. |
| 00012 | Le catalogue n'a pas d'entrée /StructTreeRoot. Requis uniquement pour la conformité de niveau a. Un document PDF balisé doit posséder une arborescence de structure logique. |
Codes d'anomalie PDF/UA-1 (ComplianceTest = 2)
| 10001 | Le flux de métadonnées XMP ne contient pas pdfuaid:part, ou la valeur n'est pas 1. ISO 14289-1 §5 exige qu'un fichier conforme s'identifie au moyen de cette propriété ; ISO 14289-1 §6.2 interdit de revendiquer la conformité sans elle. |
|---|---|
| 10002 | Le catalogue du document n'a pas de flux /Metadata. La revendication de conformité PDF/UA-1 est consignée dans ce flux ; sans lui, le fichier ne peut pas s'annoncer comme accessible. |
| 10003 | Le dictionnaire /MarkInfo du catalogue est absent ou /Marked ne vaut pas true. ISO 14289-1 §7.1 exige que tout fichier conforme se déclare comme balisé afin que les technologies d'assistance puissent s'appuyer sur l'arborescence de structure. |
| 10004 | Le catalogue n'a pas d'entrée /StructTreeRoot. Un fichier PDF/UA-1 doit inclure une arborescence de structure logique décrivant l'ordre de lecture et la sémantique du document. |
| 10005 | Le dictionnaire /ViewerPreferences est absent ou son entrée /DisplayDocTitle ne vaut pas true. ISO 14289-1 §7.1 exige que les lecteurs conformes affichent le titre du document dans leur fenêtre plutôt que le nom du fichier. |
| 10006 | L'entrée /Lang du catalogue est absente ou vide. ISO 14289-1 §7.2 (renvoyant à ISO 32000-1 §14.9.2) exige que tout fichier conforme déclare sa langue naturelle afin que les lecteurs d'écran retiennent la voix et les règles de prononciation correctes. |
| 10007 | Le flux de métadonnées XMP ne comporte pas de dc:title Dublin Core non vide. ISO 14289-1 §7.1 exige "une entrée dc:title qui identifie clairement le document". |
| 10008 | Le dictionnaire /MarkInfo a /Suspects à true. ISO 14289-1 §7.1 : les fichiers revendiquant la conformité PDF/UA doivent avoir une valeur Suspects de false — une valeur true marque le balisage comme susceptible de contenir des erreurs. |
| 10009 | Le /RoleMap du document remappe un ou plusieurs types de structure standard. ISO 14289-1 §7.1 : les balises standard définies dans ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table, etc.) ne doivent pas être remappées. La ligne de détail nomme la première balise standard remappée. |
| 10010 | Le fichier est chiffré, mais le bit 10 de la clé d'autorisation de chiffrement /P (masque 512, "Extract for accessibility") n'est pas défini. ISO 14289-1 §7.16 exige que tout fichier conforme chiffré autorise l'extraction pour l'accessibilité afin que les technologies d'assistance puissent accéder au contenu. |
| 10011 | Un formulaire XFA dynamique a été détecté : le paquet XDP XFA contient <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 interdit les formulaires XFA dynamiques dans les fichiers conformes ; le XFA statique est permis. |
| 10012 | Un Reference XObject (Form XObject portant une entrée /Ref) a été détecté. ISO 14289-1 §7.20 interdit les XObjects de référence car ils permettent à un PDF d'en incorporer un autre par référence sans exposer le contenu référencé aux technologies d'assistance. |
| 10013 | Une ou plusieurs annotations TrapNet ont été détectées. ISO 14289-1 §7.18.2 interdit explicitement TrapNet dans les fichiers conformes. La ligne de détail indique combien d'annotations ont été trouvées. |
| 10014 | Une ou plusieurs pages portent des annotations mais ne définissent pas /Tabs /S dans leur dictionnaire de page. ISO 14289-1 §7.18.3 exige que l'ordre de tabulation de telles pages suive l'arborescence de structure, ce que signale /Tabs /S. La ligne de détail indique le nombre de pages en cause. |
| 10015 | Une ou plusieurs annotations Link n'ont pas de description alternative /Contents non vide. ISO 14289-1 §7.18.5 exige que chaque annotation Link porte une description accessible afin que les lecteurs d'écran puissent annoncer la cible du lien. La ligne de détail indique le nombre d'annotations Link en cause. |
| 10016 | Un ou plusieurs dictionnaires FileSpec de fichiers incorporés n'ont pas la clé de nom de fichier /F. ISO 14289-1 §7.11 exige que chaque FileSpec de fichier incorporé porte à la fois /F et /UF. |
| 10017 | Un ou plusieurs dictionnaires FileSpec de fichiers incorporés n'ont pas la clé de nom de fichier Unicode /UF. ISO 14289-1 §7.11 exige que chaque FileSpec de fichier incorporé porte à la fois /F et /UF. |
| 10018 | Un ou plusieurs dictionnaires de configuration de contenu facultatif n'ont pas de chaîne de texte /Name non vide. ISO 14289-1 §7.10 exige que chaque dictionnaire de configuration OCG (l'entrée par défaut D plus chaque dictionnaire de OCProperties/Configs) porte un /Name non vide. |
| 10019 | Un ou plusieurs dictionnaires de configuration de contenu facultatif contiennent la clé /AS interdite. ISO 14289-1 §7.10 interdit explicitement /AS dans tout dictionnaire de configuration OCG afin d'empêcher les ajustements d'état automatiques pilotés par les informations d'utilisation. |
| 10020 | Une ou plusieurs polices hors Standard 14 référencées par le document n'incorporent pas leur programme de police (pas d'entrée FontFile, FontFile2 ou FontFile3 sur le FontDescriptor). ISO 14289-1 §7.21.4.1 exige que chaque police utilisée pour le rendu incorpore son programme. Les polices Type 3 échappent à ce contrôle car leurs glyphes sont des CharProcs en ligne. |
| 10021 | Un ou plusieurs descendants CIDFontType2 n'ont pas l'entrée /CIDToGIDMap. ISO 14289-1 §7.21.3.2 exige que chaque CIDFont Type 2 incorporé porte /CIDToGIDMap (soit sous forme d'un flux faisant correspondre les CIDs aux indices de glyphes, soit sous forme du nom Identity). |
| 10022 | Une ou plusieurs polices Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats et leurs variantes gras / oblique) sont référencées sans programme de police incorporé. ISO 14289-1 §7.21.4 NOTE 5 précise qu'il n'y a aucune exemption d'incorporation pour les 14 polices Type 1 standard. |
| 10023 | Une ou plusieurs polices n'ont pas de CMap /ToUnicode et ne relèvent pas de la liste d'exemption §7.21.7. Cette liste couvre les MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding prédéfinis, les polices Type 0 dont le CIDFont descendant utilise les collections de caractères Adobe GB1 / CNS1 / Japan1 / Korea1, et les polices TrueType non symboliques. |
| 10024 | Le premier élément de titre dans l'ordre du document n'est pas H1 (ou le H fortement structuré). ISO 14289-1 §7.4.2 : "Si des balises de titre sont utilisées, H1 doit être le premier." |
| 10025 | Un ou plusieurs sauts de niveau de titre ont été détectés dans l'ordre du document — p. ex. un H1 immédiatement suivi d'un H3, en sautant H2. ISO 14289-1 §7.4.2 exige que les séquences de titres descendantes progressent dans un ordre numérique strict sans sauter de niveaux intermédiaires. |
| 10026 | Une ou plusieurs annotations Widget n'ont pas d'entrée /StructParent. ISO 14289-1 §7.18.4 exige que les annotations Widget soient imbriquées dans une balise de structure Form ; sans /StructParent, le widget ne peut absolument pas être atteint depuis l'arborescence de structure. La ligne de détail indique le nombre. |
| 10027 | Une ou plusieurs annotations Widget ont une entrée /StructParent mais la valeur ne se résout pas, via StructTreeRoot/ParentTree, vers un élément de structure avec /S = Form. ISO 14289-1 §7.18.4 exige que chaque annotation Widget soit imbriquée dans une balise de structure Form. Causes possibles : l'entrée /ParentTree manque entièrement, pointe vers un non-StructElem (entier brut / dictionnaire MCR) ou nomme une balise non Form. |
| 10028 | Une ou plusieurs polices TrueType non symboliques ont un /Encoding (ou un /BaseEncoding de dictionnaire Encoding) qui n'est ni MacRomanEncoding ni WinAnsiEncoding. ISO 14289-1 §7.21.6 restreint l'encodage TrueType non symbolique à ces deux noms prédéfinis. |
| 10029 | Une ou plusieurs polices TrueType symboliques comportent une entrée /Encoding dans le dictionnaire de police. Le quatrième paragraphe de ISO 14289-1 §7.21.6 l'interdit — l'encodage TrueType symbolique doit s'exprimer uniquement par la table cmap du programme de police incorporé. |
| 10030 | Un ou plusieurs éléments de structure L (liste) n'ont pas l'attribut ListNumbering. ISO 14289-1 §7.6 exige que chaque balise L déclare son style de numérotation via cet attribut. Les valeurs valides sont None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha et LowerAlpha (ISO 32000-1 Table 347). |
| 10031 | Une ou plusieurs annotations Link portent un dictionnaire d'action URI dont l'entrée /IsMap vaut true. ISO 14289-1 §7.18.5 interdit /IsMap = true sur une action URI, sauf si une fonctionnalité équivalente est fournie ailleurs dans le contenu sans clé /IsMap. Les auteurs ayant un cas d'usage IsMap légitime devraient supprimer ce diagnostic de leur propre initiative. |
| 10032 | Un ou plusieurs éléments de structure Note n'ont pas l'entrée /ID. ISO 14289-1 §7.9 exige que chaque balise Note déclare un /ID unique afin que les références croisées puissent viser une cible stable. |
| 10033 | Au moins deux éléments de structure Note partagent la même valeur /ID. La ligne de détail indique le nombre de paires en double détectées. ISO 14289-1 §7.9 exige que les ID des Note soient uniques dans le document. |
| 10034 | Un ou plusieurs programmes TrueType non symboliques (FontDescriptor avec l'indicateur Symbolic effacé, flux FontFile2 présent) incorporent une table cmap dont la seule sous-table est l'entrée symbolique (3,0) Microsoft. Le premier paragraphe de ISO 14289-1 §7.21.6 exige au moins une sous-table cmap non symbolique afin que le programme puisse rendre les points de code déclarés par son /Encoding. |
| 10035 | Une ou plusieurs polices TrueType non symboliques déclarent un /Encoding avec un tableau /Differences contenant des noms de glyphes absents de l'Adobe Glyph List 2.0. .notdef est toléré car la spécification l'autorise implicitement. Le troisième paragraphe de ISO 14289-1 §7.21.6 exige que chaque entrée Differences figure dans l'AGL. |
| 10036 | Une ou plusieurs largeurs de polices TrueType simples diffèrent des métriques correspondantes du programme de police incorporé de plus d'un millième d'em. ISO 14289-1 §7.21.5 exige que le tableau /Widths concorde avec les métriques de glyphes incorporées. |
| 10037 | Une ou plusieurs largeurs CIDFontType2 diffèrent des métriques correspondantes du programme TrueType incorporé de plus d'un millième d'em. ISO 14289-1 §7.21.5 exige que le tableau /W concorde avec les métriques de glyphes incorporées. |
| 10038 | Un /CharSet de descripteur de police Type 1 omet un ou plusieurs noms de glyphes présents dans son programme de police incorporé. ISO 14289-1 §7.21.4.2 exige que l'entrée énumère chaque glyphe incorporé. |
| 10039 | Un /CIDSet de descripteur de police CID omet un ou plusieurs CIDs correspondant à des glyphes de son programme de police incorporé. ISO 14289-1 §7.21.4.2 exige que l'ensemble de bits identifie chaque CID incorporé. |
| 10040 | Un Form XObject contenant du texte est appelé depuis un contenu de page hors contenu marqué. ISO 14289-1 §7.20 exige que le contenu d'un Form XObject soit incorporé dans des éléments de structure. |
| 10041 | Un ou plusieurs opérandes d'affichage de texte se résolvent au glyphe .notdef. ISO 14289-1 §7.21.8 interdit les références à .notdef quel que soit le mode de rendu du texte. |
| 10042 | Un ou plusieurs dictionnaires de données de séquence multimédia (identifiés par /S /MCD, éventuellement /Type /MediaClip) n'ont pas l'entrée obligatoire de type de contenu /CT. ISO 14289-1 §7.18.6 rend obligatoire cette clé facultative de ISO 32000-1 Table 274. |
| 10043 | Un ou plusieurs dictionnaires de données de séquence multimédia n'ont pas le tableau obligatoire /Alt (paires chaîne de langue + texte alternatif). ISO 14289-1 §7.18.6 rend obligatoire cette clé facultative de ISO 32000-1 Table 274 afin que les technologies d'assistance puissent annoncer une description du multimédia incorporé. |
| 10044 | Un ou plusieurs nœuds de l'arborescence de structure portent plus d'un enfant H (titre générique) direct. ISO 14289-1 §7.4.4 l'interdit explicitement — scindez la section, ou remplacez les balises H par des niveaux H1..H6 numérotés. |
Remarques
Le test PDF/A est conçu comme une vérification automatique rapide avant livraison. Il repère les anomalies au niveau du document qui disqualifient d'emblée un fichier (version PDF erronée, OutputIntent absent, arborescence de structure absente au niveau A, chiffrement, calques en PDF/A-1). Il ne parcourt pas chaque opérateur de flux de contenu et ne vérifie ni l'incorporation des polices ni les références d'espaces colorimétriques de chaque objet peint — ces validations requièrent un validateur PDF/A dédié (tel que veraPDF). Utilisez cette fonction comme contrôle de première ligne et comme barrière de régression dans les pipelines de build. Utilisez CreatePreflightReport ou SavePreflightReport lorsque vous voulez que la bibliothèque mette en forme les listes d'anomalies dans un rapport texte réutilisable. Utilisez CreatePreflightReportEx ou SavePreflightReportEx pour une sortie de rapport en texte, JSON, HTML ou CSV, ou consultez Preflight Reports pour le workflow de rapport completL'API associée
GetPDFUADiagnostics effectue des contrôles analogues pour PDF/UA (ISO 14289-1) sur le document en mémoire en cours de construction, plutôt que sur un fichier externeLorsque vous produisez une sortie PDF/A avec cette bibliothèque, appelez
SetPDFAMode avant d'ajouter du contenu. Le garde-fou côté génération intégré à SetPDFAMode bloque les opérations interdites par la partie choisie, si bien qu'un document construit ainsi passera normalement CheckFileCompliance automatiquement
Exemple
// Validate a delivered PDF/A file and print all issues
var
Issues, Count, I: Integer;
begin
Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
if Issues = 0 then
WriteLn('archive.pdf: PDF/A conformant')
else
begin
Count := PDF.GetStringListCount(Issues);
WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
for I := 1 to Count do
WriteLn(' ', PDF.GetStringListItem(Issues, I));
end;
end;
// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
Failed: Boolean;
begin
Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
if Failed then
Halt(1);
end;Voir aussi
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
Le test de conformité 3 audite PDF/X (ISO 15930) : identification d'édition, intention de sortie, géométrie de page, polices incorporées et l'ensemble des fonctionnalités interdites ; pour PDF/X-6, il valide aussi les indicateurs d'annotations et les apparences fixes, les apparences AcroForm et signature, les exclusions XFA et d'apparences générées par la visionneuse, le placement des actions, les chaînes d'actions, l'ensemble des actions nommées permises et chaque valeur UseBlackPtComp
Le test de conformité 4 audite les métadonnées d'identification PDF/VT-3, sa base de la famille PDF/X-6, le graphe DPartRoot et DPart, les noms et valeurs DPM, le niveau d'enregistrement, l'ordre des pages et la couverture exacte des feuilles ; les vérifications composées partagent une passe d'analyseur
Le test de conformité 5 audite le placement des marqueurs PDF/R-1, la version et le chiffrement, les objets indirects de génération zéro, les dictionnaires et filtres restreints, les programmes de page à flux unique, les bandes raster ordonnées, les codages d'image, la couverture de pages et la résolution effective ; il peut réutiliser une passe d'analyse de pipeline de validation partagée
Le test de conformité 6 audite la fondation PDF/X et l'identification XMP PDF/VCR-1, la racine de modèle directe unique, les champs déclarés, le champ de sélection de pages optionnel et chaque espace réservé de remplacement PassThrough de feuille, la liaison de pages, les MCID et les boîtes englobantes ; il peut réutiliser une passe d'analyse de pipeline de validation partagée
Le test de conformité 7 audite l'identification et les métadonnées de cycle de vie PDF/E-1, les identifiants de trailer, le chiffrement permis, les intentions de sortie et les espaces colorimétriques de périphérique, les opérateurs de contenu, les polices, les annotations, les formulaires, le contenu optionnel, les actions, les références à des fichiers externes, les états graphiques et les restrictions de flux 3D ; il peut réutiliser une passe d'analyse de pipeline de validation partagée