CheckFileComplianceA
Conformité, inspection de documents
Description
Le A final indique le point d’entrée ANSI (char) de la DLL ; la surface ActiveX/COM n’expose que la forme Unicode. Le comportement est identique à celui de CheckFileCompliance et les arguments de chaîne sont interprétés selon la page de codes SetAnsiMode actuelle
Lit un fichier PDF externe et le valide selon une norme ISO choisie. La valeur renvoyée est soit zéro (le fichier réussit entièrement le contrôle), soit un handle StringListID non nul répertoriant tous les problèmes détectés. Chaque élément comporte un code court, deux-points et un message lisible — exactement le même format de code que celui de GetPDFUADiagnostics. Parcourez le résultat avec GetStringListCount et GetStringListItem
Le 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éterminer le jeu de règles à appliquer
Le test PDF/UA-1 (ajouté dans v3.56.0) vérifie un PDF externe par rapport à ISO 14289-1 et émet des codes de diagnostic dans la plage 10xxx, de sorte qu’ils restent visuellement distincts des codes PDF/A 00xxx
Syntaxe
Delphi
Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;
DLL
int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * 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. Transmettez une chaîne vide pour les documents non chiffrés. Notez qu’un document chiffré échoue au test PDF/A (code 00006) même si le mot de passe correct est fourni — PDF/A interdit le chiffrement |
| ComplianceTest | Norme à contrôler. 1 — PDF/A (ISO 19005-1/-2/-3, six niveaux de conformité). 2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessible) |
| Options | Indicateurs binaires qui modifient le test 0 — Valeur par défaut : signaler chaque problème trouvé dans le document 1 — S’arrêter après le premier problème et revenir immédiatement. Utile lorsque l’appelant a seulement besoin d’un résultat réussite/échec |
Valeurs de retour
| 0 | Le fichier est conforme à la norme choisie |
|---|---|
| Non-zero | 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 de problème PDF/A (ComplianceTest = 1)
| 00002 | La version PDF dépasse le maximum du niveau de conformité, 1.4 pour PDF/A-1 et 1.7 pour PDF/A-2/3. La ligne détaillée nomme la version fautive et le maximum autorisé |
|---|---|
| 00003 | Le Catalog contient /OCProperties, contenu facultatif ou couches, interdit par PDF/A-1. PDF/A-2 et PDF/A-3 autorisent les couches et ne déclenchent pas ce contrôle |
| 00005 | La paire XMP pdfaid:part+pdfaid:conformance manque, est mal formée ou contient une valeur hors de 1A, 1B, 2A, 2B, 3A, 3B. La bibliothèque ne peut pas choisir le jeu de règles ; le problème est donc fatal quels que soient les Options |
| 00006 | Le document est chiffré PDF/A interdit le chiffrement de toute partie |
| 00007 | Le Catalog ne contient pas d'entrée /OutputIntents. Toutes les parties PDF/A exigent une intention de sortie pour définir sans ambiguïté l'espace de rendu des couleurs |
| 00011 | Le Catalog n'a pas d'entrée /MarkInfo. Exigé uniquement pour la conformité de niveau a, PDF/A-1a, 2a, 3a — un PDF balisé doit se déclarer |
| 00012 | Le Catalog n'a pas d'entrée /StructTreeRoot. Exigé uniquement pour la conformité de niveau a. Un PDF balisé doit avoir une arborescence logique |
Codes de problème PDF/UA-1 (ComplianceTest = 2)
| 10001 | Le flux de métadonnées XMP ne contient pas pdfuaid:part, ou sa valeur n’est pas 1. ISO 14289-1 §5 exige qu’un fichier conforme s’identifie par cette propriété ; ISO 14289-1 §6.2 interdit de déclarer la conformité sans elle |
|---|---|
| 10002 | Le Catalog du document n'a pas de flux /Metadata. Une déclaration PDF/UA-1 y est enregistrée ; sans lui, le fichier ne peut se déclarer accessible |
| 10003 | Le dictionnaire /MarkInfo du catalogue manque ou /Marked ne vaut pas true. ISO 14289-1 §7.1 exige que chaque fichier conforme se déclare balisé afin que les technologies d’assistance puissent se fier à l’arbre de structure |
| 10004 | Le Catalog n'a pas d'entrée /StructTreeRoot. Un fichier PDF/UA-1 doit inclure une arborescence logique décrivant l'ordre de lecture et la sémantique du document |
| 10005 | Le dictionnaire /ViewerPreferences manque 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 barre de fenêtre au lieu du nom de fichier |
| 10006 | L’entrée /Lang du catalogue manque ou est vide. ISO 14289-1 §7.2 (renvoyant à ISO 32000-1 §14.9.2) exige que chaque fichier conforme déclare sa langue naturelle afin que les lecteurs d’écran sélectionnent la voix et les règles de prononciation appropriées |
| 10007 | Le flux XMP ne contient pas de Dublin Core dc:title non vide. ISO 14289-1 §7.1 exige une entrée dc:title identifiant clairement le document |
| 10008 | Le dictionnaire /MarkInfo définit /Suspects sur true. ISO 14289-1 §7.1 : les fichiers revendiquant la conformité PDF/UA doivent avoir une valeur Suspects de false — true indique que le balisage contient des erreurs connues |
| 10009 | Le /RoleMap du document réassocie 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 réassociées. La ligne de détail désigne la première balise concernée |
| 10010 | Le fichier est chiffré, mais le bit 10 de la clé d’autorisation /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 d’accessibilité afin que les technologies d’assistance atteignent le 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 ; les formulaires XFA statiques sont autorisés |
| 10012 | Un Reference XObject (Form XObject comportant une entrée /Ref) a été détecté. ISO 14289-1 §7.20 interdit les XObject 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 détaillée indique leur nombre |
| 10014 | Une ou plusieurs pages comportent des annotations mais ne définissent pas /Tabs /S dans leur dictionnaire. ISO 14289-1 §7.18.3 exige que leur ordre de tabulation suive l’arbre de structure, ce que signale /Tabs /S. La ligne de détail indique le nombre de pages fautives |
| 10015 | Une ou plusieurs annotations Link ne comportent pas de description alternative /Contents non vide. ISO 14289-1 §7.18.5 exige une description accessible pour chaque Link afin que les lecteurs d’écran annoncent sa cible. La ligne de détail indique leur nombre |
| 10016 | Le dictionnaire FileSpec d’un ou plusieurs fichiers incorporés ne comporte pas la clé de nom de fichier /F. ISO 14289-1 §7.11 exige que chaque FileSpec de fichier incorporé contienne à la fois /F et /UF |
| 10017 | Le dictionnaire FileSpec d’un ou plusieurs fichiers incorporés ne comporte pas la clé Unicode de nom de fichier /UF. ISO 14289-1 §7.11 exige que chaque FileSpec de fichier incorporé contienne à la fois /F et /UF |
| 10018 | Un ou plusieurs dictionnaires de configuration de contenu facultatif n’ont pas de chaîne /Name non vide. ISO 14289-1 §7.10 exige que chaque dictionnaire OCG, l’entrée D par défaut et chaque dictionnaire de OCProperties/Configs, comporte un /Name non vide |
| 10019 | Un ou plusieurs dictionnaires de configuration de contenu facultatif contiennent la clé interdite /AS. ISO 14289-1 §7.10 interdit explicitement /AS dans tout dictionnaire de configuration OCG afin d’empêcher les ajustements automatiques d’état fondés sur les informations d’usage |
| 10020 | Une ou plusieurs polices autres que Standard 14 ne comportent pas leur programme incorporé, aucune entrée FontFile, FontFile2 ou FontFile3 n’étant présente dans FontDescriptor. ISO 14289-1 §7.21.4.1 exige l’incorporation de chaque police utilisée. Les polices Type 3 sont ignorées, leurs glyphes étant des CharProcs en ligne |
| 10021 | Un ou plusieurs descendants CIDFontType2 ne comportent pas l’entrée /CIDToGIDMap. ISO 14289-1 §7.21.3.2 exige que chaque CIDFont Type 2 incorporée possède /CIDToGIDMap, comme flux associant les CID aux index de glyphes ou sous le nom Identity |
| 10022 | Une ou plusieurs polices Standard 14 (Helvetica, Times, Courier, Symbol, ZapfDingbats et leurs variantes grasses ou obliques) sont référencées sans programme incorporé. La NOTE 5 d’ISO 14289-1 §7.21.4 précise qu’aucune exemption d’incorporation ne s’applique aux 14 polices Type 1 standard |
| 10023 | Une ou plusieurs polices n’ont pas de CMap /ToUnicode et ne relèvent pas des exemptions §7.21.7 : MacRomanEncoding, MacExpertEncoding, WinAnsiEncoding, polices Type 0 dont le CIDFont utilise les collections Adobe GB1, CNS1, Japan1 ou Korea1, et polices TrueType non symboliques |
| 10024 | Le premier titre dans l'ordre du document n'est pas H1, ou 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 — par exemple un H1 immédiatement suivi d’un H3, sans H2. ISO 14289-1 §7.4.2 exige que les séquences descendantes suivent un ordre numérique strict sans omettre les niveaux intermédiaires |
| 10026 | Une ou plusieurs annotations Widget ne comportent pas d’entrée /StructParent. ISO 14289-1 §7.18.4 exige leur imbrication dans une balise de structure Form ; sans /StructParent, le Widget est inaccessible depuis l’arbre. La ligne de détail indique leur nombre |
| 10027 | Une ou plusieurs annotations Widget ont /StructParent, mais la valeur ne se résout pas par StructTreeRoot/ParentTree vers un élément /S = Form. ISO 14289-1 §7.18.4 exige une balise Form. Causes possibles : /ParentTree absent, référence à un élément non StructElem, ou balise autre que Form |
| 10028 | Une ou plusieurs polices TrueType non symboliques ont un /Encoding (ou un /BaseEncoding d'un dictionnaire Encoding) autre que MacRomanEncoding ou WinAnsiEncoding. ISO 14289-1 §7.21.6 limite le codage TrueType non symbolique à ces deux noms prédéfinis |
| 10029 | Une ou plusieurs polices TrueType symboliques comportent une entrée /Encoding dans leur dictionnaire. Le quatrième paragraphe d’ISO 14289-1 §7.21.6 l’interdit — le codage TrueType symbolique doit être exprimé uniquement par l'intermédiaire de la table cmap du programme de police incorporé |
| 10030 | Un ou plusieurs éléments L n’ont pas l’attribut ListNumbering. ISO 14289-1 §7.6 exige que chaque balise L déclare son style. Les valeurs valides sont None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha et LowerAlpha (ISO 32000-1, tableau 347) |
| 10031 | Une ou plusieurs annotations Link possèdent une action URI dont /IsMap vaut true. ISO 14289-1 §7.18.5 interdit /IsMap = true sauf si une fonctionnalité équivalente existe ailleurs sans clé /IsMap. Les auteurs ayant un usage légitime d’IsMap doivent supprimer eux-mêmes ce diagnostic |
| 10032 | Un ou plusieurs éléments de structure Note ne comportent pas l’entrée /ID. ISO 14289-1 §7.9 exige que chaque balise Note déclare un /ID unique afin que les renvois puissent atteindre 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 Note soient uniques dans le document |
| 10034 | Un ou plusieurs programmes TrueType non symboliques (indicateur Symbolic effacé dans FontDescriptor) incorporent une table cmap dont la seule sous-table est l’entrée Microsoft symbolique (3,0). Le premier paragraphe d’ISO 14289-1 §7.21.6 exige au moins une sous-table cmap non symbolique afin que le programme restitue les points de code déclarés par son /Encoding |
| 10035 | Une ou plusieurs polices TrueType non symboliques déclarent un /Encoding dont le tableau /Differences contient des noms absents d’Adobe Glyph List 2.0. .notdef est autorisé, car la spécification l’admet implicitement. Le troisième paragraphe d’ISO 14289-1 §7.21.6 exige que chaque entrée Differences appartienne à AGL |
| 10042 | Un ou plusieurs dictionnaires de données de clip multimédia (identifiés par /S /MCD, éventuellement /Type /MediaClip) ne comportent pas l’entrée obligatoire de type de contenu /CT. ISO 14289-1 §7.18.6 rend obligatoire cette clé facultative du tableau 274 d’ISO 32000-1 |
| 10043 | Un ou plusieurs dictionnaires de données de clip multimédia ne comportent pas le tableau /Alt requis (paires langue-chaîne et texte alternatif). ISO 14289-1 §7.18.6 rend obligatoire cette clé facultative du tableau 274 d’ISO 32000-1 afin que les technologies d’assistance puissent annoncer une description du multimédia incorporé |
| 10044 | Un ou plusieurs nœuds de l’arbre de structure possèdent plusieurs enfants H directs (titre générique). ISO 14289-1 §7.4.4 l’interdit explicitement — scindez la section ou remplacez les balises H par les niveaux numérotés H1..H6 |
Remarques
Le test PDF/A est un autocontrôle rapide avant livraison. Il détecte les problèmes de document immédiatement rédhibitoires : mauvaise version PDF, OutputIntent absent, arbre de structure absent au niveau A, chiffrement ou calques en PDF/A-1. Il ne parcourt pas chaque opérateur de flux de contenu et ne vérifie pas l’incorporation des polices ni les espaces colorimétriques de chaque objet peint — ces contrôles exigent un validateur spécialisé tel que veraPDF. Utilisez-le comme premier contrôle et garde de régression. Utilisez CreatePreflightReport ou SavePreflightReport pour obtenir un rapport texte réutilisable, CreatePreflightReportEx ou SavePreflightReportEx pour les formats texte, JSON, HTML ou CSV, ou consultez Preflight Reports pour le flux complet
L’API complémentaire GetPDFUADiagnostics effectue des contrôles analogues de PDF/UA-1 (ISO 14289-1) sur le document en mémoire en cours de création, plutôt que sur un fichier externe
Pour produire une sortie PDF/A avec cette bibliothèque, appelez SetPDFAMode avant tout contenu. La protection de génération de SetPDFAMode bloque les opérations interdites par la partie choisie ; un document ainsi construit réussit donc 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
Rapports de contrôle, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode