function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA parcourt le document ouvert à la recherche de chaque marqueur de conformité PDF/A défini par ISO 19005-1 (avec Cor.1:2007) :
pdfaid:part et pdfaid:conformance, qui indique au validateur le niveau PDF/A contre lequel le document a été écrit (1a, 1b, 2b, 3b, ...)/ID de trailer (obligatoire selon ISO 19005-1 6.1.3)xmp:CreateDate et xmp:ModifyDate dans le paquet XMP (requis lorsque le dictionnaire Info contient des valeurs CreationDate / ModDate selon 6.7.3 Exemple 2)pdfaExtension:schemas décrivant le schéma d’extension pdfaid (requis par 6.7.8 / Cor.1)Le résultat est un enregistrement TPdfAValidationResult :
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone, ou pacUnknown pour un marqueur PDF/A sans niveau reconnu)TPdfAValidationIssues de valeurs TPdfAValidationIssue décrivant chaque problème trouvé. Les marqueurs structurels sont pvaiMissingXmpMetadata, pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiEncryptionPresent, pvaiMissingTrailerId, pvaiMissingXmpDates et pvaiMissingExtensionSchema. Il signale aussi des violations au niveau contenu que l’injection de marqueurs ne peut pas corriger : pvaiLevelAStructureMissing (une revendication de niveau A sans structure balisée), pvaiJavaScriptPresent, pvaiForbiddenAction, pvaiAdditionalActions, pvaiEmbeddedFilesNonConforming, pvaiLzwUsed, pvaiTransparencyForbidden, pvaiOptionalContentForbidden, pvaiForbiddenAnnotation, pvaiNeedAppearancesTrue, pvaiXfaPresent, pvaiFontNotEmbedded et pvaiUnicodeMappingMissing (une revendication PDF/A-2u / PDF/A-3u dont les polices n’ont pas de /ToUnicode). Les contrôles ISO 19005 plus stricts ajoutent pvaiTrappedTrue, pvaiForbiddenActionSubtype, pvaiTransparentColorSpace, pvaiAnnotationDictViolation, pvaiUnembeddedFont, pvaiMixedDeviceColorSpaces, pvaiUndefinedContentOperator, pvaiForbiddenRenderingIntent, pvaiExtGStateTransferFunction, pvaiImageDictionaryViolation, pvaiFormXObjectViolation, pvaiPostScriptOrRefXObject, pvaiAnnotationFlagsViolation, pvaiDeprecatedAction, pvaiMetadataFilterForbidden, pvaiStructElemTypeMissing et pvaiRoleMapMissing. La passe 4 ajoute pvaiHeaderBinaryMarkerMissing (6.1.2), pvaiExternalStreamRef (6.1.7), pvaiOutputIntentScheme (6.2.2), pvaiInfoXmpDateMismatch (6.7.3), pvaiMarkInfoMissing (6.8.2.2 Level A), pvaiAnnotationApDictViolation (6.5.3), pvaiEmbeddedFileMissingAFRelationship (PDF/A-3 Annexe E.2) et pvaiJpeg2000Violation (PDF/A-2 6.2.8.3). La passe 5 ajoute pvaiCidFontMissingCidToGidMap (6.3.3.2), pvaiSubsetMissingCharSet (6.3.5), pvaiSubsetMissingCidSet (6.3.5), pvaiWidgetActionForbidden (6.6.1) et pvaiOptionalContentAsKey (PDF/A-2 6.9). La passe 6 ajoute pvaiNeedsRenderingPresent (PDF/A-2 6.4.2), pvaiDestOutputProfileRef (PDF/A-3 6.2.3), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8), pvaiXmpPacketBytesAttr (6.7.5) et pvaiAnnotationToggleNoView (PDF/A-2 6.3.2). La passe 7 (v1.73.0) ajoute la couche de modèle d’objet Pdfium : pvaiPdfiumFontNotEmbedded (6.3.4, par police FPDFFont_GetIsEmbedded) et pvaiPdfiumUnicodeMapError (6.3.8, par caractère FPDFText_HasUnicodeMapError) ; ceux-ci sont définis par TPdf.ValidatePdfA, et non par le ValidatePdfACompliance autonome au niveau octet. La passe 8 (v1.74.0) ajoute pvaiPermissionsViolation (6.1.12), pvaiTransActionForbidden (PDF/A-2 6.5.1) et pvaiPdfiumObjectTransparency (PDF/A-1 6.4 via FPDFPageObj_HasTransparency). La passe 9 (v1.75.0) ajoute pvaiIntegerImplementationLimit (PDF/A-2 6.1.13), pvaiBlendModeNotWhitelisted (PDF/A-2 6.2.10) et pvaiHexStringOddDigits (6.1.6). La passe 10 (v1.76.0) ajoute pvaiNameNotValidUtf8 (PDF/A-2 6.1.8), pvaiInlineImageLzwForbidden (PDF/A-2 6.1.10) et pvaiTrueTypeDifferencesForbidden (6.3.7). La passe 11 (v1.77.0) ajoute pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8, modèle d’objet Pdfium), pvaiWordBreakMissing (Level A 6.8.3.2) et pvaiLinkActionMissingTarget (6.6.3)pvaiMissingXmpMetadata signifie que la clé /Metadata du catalogue est absente, illisible, ou ne se résout pas en un dictionnaire de flux avec /Type /Metadata et /Subtype /XMLpvaiPdfA1Pdf15Structure rapporte les documents PDF/A-1 qui contiennent des flux de références croisées ou des flux d’objets PDF 1.5 ; ces structures restent valides pour PDF/A-2 et PDF/A-3pvaiInlineImageLzwForbidden s’applique aux filtres d’image inline dans chaque partie PDF/A : PDF/A-1 rejette /LZWDecode et PDF/A-2 / PDF/A-3 rejettent aussi les valeurs de filtre inline /LZW, /LZWDecode et /CryptpvaiImageDictionaryViolation couvre aussi les images inline PDF/A-2 et PDF/A-3 dont la valeur /I ou /Interpolate est true, en plus des violations de dictionnaire /Alternates, /OPI et /Interpolate true d’XObject d’imagepvaiAnnotationApDictViolation couvre à la fois les dictionnaires d’apparence d’annotation mal formés dont l’entrée /AP contient des clés autres que /N et les annotations qui requièrent mais ne possèdent pas de dictionnaire d’apparencepvaiInfoXmpValueMismatch rapporte au moins une valeur Info présente dont la propriété XMP mappée est absente, a une forme de conteneur RDF erronée, diffère en tant que texte Unicode, contient une date invalide ou représente un instant UTC différentConformance est un vrai niveau PDF/A et que Issues est videValidatePdfA est une inspection en lecture seule — elle ne modifie pas
le document et peut être appelée en toute sécurité de façon répétée. Utilisez-la avant de remettre un
PDF à un système d’archivage pour faire remonter la non-conformité à
l’opérateur. Pour le contrôle courant « quel est ce niveau ? » qui n’a pas besoin
de la liste de problèmes, préférez la propriété plus légère
PdfAConformance
Conformance = pacNone et un tableau Issues vide
uses System.TypInfo;
var
Outcome: TPdfAValidationResult;
Issue: TPdfAValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\report.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfA;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfAConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfAValidationIssue), Ord(Issue)));
end;