function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA doorloopt het geopende document op zoek naar elke PDF/A-conformiteitsmarker die ISO 19005-1 (met Cor.1:2007) definieert:
pdfaid:part- en pdfaid:conformance-items, waarmee de validator ziet op welk PDF/A-niveau het document is geautoreerd (1a, 1b, 2b, 3b, ...)/ID-array (verplicht per ISO 19005-1 6.1.3)xmp:CreateDate en xmp:ModifyDate in het XMP-pakket (vereist wanneer het Info-dictionary CreationDate-/ModDate-waarden bevat, per 6.7.3 Example 2)pdfaExtension:schemas die het pdfaid-extensieschema beschrijft (vereist door 6.7.8 / Cor.1)Het resultaat is een TPdfAValidationResult-record:
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone, of pacUnknown voor een PDF/A-marker zonder herkend niveau)TPdfAValidationIssues-verzameling van TPdfAValidationIssue-waarden die elk gevonden probleem beschrijven. De structurele markers zijn pvaiMissingXmpMetadata, pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiEncryptionPresent, pvaiMissingTrailerId, pvaiMissingXmpDates en pvaiMissingExtensionSchema. Het rapporteert ook inhoudelijke schendingen die markerinjectie niet kan fixen: pvaiLevelAStructureMissing (een Level A-claim zonder getagde structuur), pvaiJavaScriptPresent, pvaiForbiddenAction, pvaiAdditionalActions, pvaiEmbeddedFilesNonConforming, pvaiLzwUsed, pvaiTransparencyForbidden, pvaiOptionalContentForbidden, pvaiForbiddenAnnotation, pvaiNeedAppearancesTrue, pvaiXfaPresent, pvaiFontNotEmbedded en pvaiUnicodeMappingMissing (een PDF/A-2u / PDF/A-3u-claim waarvan fonts /ToUnicode missen). Strengere ISO 19005-controles voegen pvaiTrappedTrue, pvaiForbiddenActionSubtype, pvaiTransparentColorSpace, pvaiAnnotationDictViolation, pvaiUnembeddedFont, pvaiMixedDeviceColorSpaces, pvaiUndefinedContentOperator, pvaiForbiddenRenderingIntent, pvaiExtGStateTransferFunction, pvaiImageDictionaryViolation, pvaiFormXObjectViolation, pvaiPostScriptOrRefXObject, pvaiAnnotationFlagsViolation, pvaiDeprecatedAction, pvaiMetadataFilterForbidden, pvaiStructElemTypeMissing en pvaiRoleMapMissing toe. Round 4 voegt 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 Annex E.2) en pvaiJpeg2000Violation (PDF/A-2 6.2.8.3) toe. Round 5 voegt pvaiCidFontMissingCidToGidMap (6.3.3.2), pvaiSubsetMissingCharSet (6.3.5), pvaiSubsetMissingCidSet (6.3.5), pvaiWidgetActionForbidden (6.6.1) en pvaiOptionalContentAsKey (PDF/A-2 6.9) toe. Round 6 voegt pvaiNeedsRenderingPresent (PDF/A-2 6.4.2), pvaiDestOutputProfileRef (PDF/A-3 6.2.3), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8), pvaiXmpPacketBytesAttr (6.7.5) en pvaiAnnotationToggleNoView (PDF/A-2 6.3.2) toe. Round 7 (v1.73.0) voegt de Pdfium-objectmodellaag toe: pvaiPdfiumFontNotEmbedded (6.3.4, per font FPDFFont_GetIsEmbedded) en pvaiPdfiumUnicodeMapError (6.3.8, per character FPDFText_HasUnicodeMapError); deze worden gezet door TPdf.ValidatePdfA, niet door de op bytes werkende standalone ValidatePdfACompliance. Round 8 (v1.74.0) voegt pvaiPermissionsViolation (6.1.12), pvaiTransActionForbidden (PDF/A-2 6.5.1) en pvaiPdfiumObjectTransparency (PDF/A-1 6.4 via FPDFPageObj_HasTransparency) toe. Round 9 (v1.75.0) voegt pvaiIntegerImplementationLimit (PDF/A-2 6.1.13), pvaiBlendModeNotWhitelisted (PDF/A-2 6.2.10) en pvaiHexStringOddDigits (6.1.6) toe. Round 10 (v1.76.0) voegt pvaiNameNotValidUtf8 (PDF/A-2 6.1.8), pvaiInlineImageLzwForbidden (PDF/A-2 6.1.10) en pvaiTrueTypeDifferencesForbidden (6.3.7) toe. Round 11 (v1.77.0) voegt pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8, Pdfium-objectmodel), pvaiWordBreakMissing (Level A 6.8.3.2) en pvaiLinkActionMissingTarget (6.6.3) toepvaiMissingXmpMetadata betekent dat de catalogussleutel /Metadata ontbreekt, onleesbaar is of niet resolveert naar een stream-dictionary met /Type /Metadata en /Subtype /XMLpvaiPdfA1Pdf15Structure rapporteert PDF/A-1-documenten die PDF 1.5 cross-reference streams of object streams bevatten; deze structuren blijven geldig voor PDF/A-2 en PDF/A-3pvaiInlineImageLzwForbidden geldt voor inline-image-filters in elk PDF/A-deel: PDF/A-1 wijst /LZWDecode af en PDF/A-2 / PDF/A-3 wijzen ook de inline-image-filterwaarden /LZW, /LZWDecode en /Crypt afpvaiImageDictionaryViolation dekt ook PDF/A-2- en PDF/A-3-inline images waarvan de /I- of /Interpolate-waarde true is, naast Image XObject-schendingen van /Alternates, /OPI en /Interpolate truepvaiAnnotationApDictViolation dekt zowel misvormde annotation appearance-dictionaries waarvan het /AP-item andere sleutels dan /N bevat als annotaties die een appearance-dictionary vereisen maar missenpvaiInfoXmpValueMismatch rapporteert ten minste één aanwezige Info-waarde waarvan de gemapte XMP-eigenschap ontbreekt, de verkeerde RDF-containerstructuur heeft, als Unicode-tekst verschilt, een ongeldige datum bevat of een ander UTC-moment vertegenwoordigtConformance een echt PDF/A-niveau is en Issues leeg isValidatePdfA is een alleen-lezen inspectie — het document wordt niet gewijzigd en herhaalde aanroepen zijn veilig. Gebruik het voordat een PDF naar een archiefsysteem gaat om niet-conformiteit aan de beheerder te tonen. Voor de gebruikelijke check "welk niveau is dit?" die de problemenlijst niet nodig heeft, verdient de lichtere eigenschap PdfAConformance de voorkeur
Conformance = pacNone en een lege Issues-array
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;