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

InputFileNameChemin complet du fichier PDF à valider Le fichier est ouvert en lecture seule et n'est pas modifié
PasswordMot 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
ComplianceTestNorme à contrôler.

1 — PDF/A (ISO 19005-1/-2/-3, six niveaux de conformité).
2 — PDF/UA-1 (ISO 14289-1:2014, PDF accessible)
OptionsIndicateurs 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

0Le fichier est conforme à la norme choisie
Non-zeroHandle 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)

00002La 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é
00003Le 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
00005La 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
00006Le document est chiffré PDF/A interdit le chiffrement de toute partie
00007Le 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
00011Le 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
00012Le 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)

10001Le 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
10002Le 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
10003Le 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
10004Le 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
10005Le 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
10006L’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
10007Le 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
10008Le 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
10009Le /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
10010Le 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
10011Un 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
10012Un 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
10013Une 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
10014Une 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
10015Une 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
10016Le 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
10017Le 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
10018Un 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
10019Un 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
10020Une 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
10021Un 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
10022Une 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
10023Une 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
10024Le 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
10025Un 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
10026Une 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
10027Une 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
10028Une 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
10029Une 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é
10030Un 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)
10031Une 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
10032Un 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
10033Au 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
10034Un 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
10035Une 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
10042Un 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
10043Un 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é
10044Un 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