function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA percorre il documento aperto alla ricerca di ogni marcatore di conformità PDF/A definito da ISO 19005-1 (con Cor.1:2007):
pdfaid:part e pdfaid:conformance, che indica al validatore rispetto a quale livello PDF/A il documento è stato redatto (1a, 1b, 2b, 3b, ...)/ID nel trailer (obbligatorio secondo ISO 19005-1 6.1.3)xmp:CreateDate e xmp:ModifyDate nel pacchetto XMP (richiesti quando il dizionario Info contiene valori CreationDate / ModDate secondo 6.7.3 Example 2)pdfaExtension:schemas che descrive lo schema di estensione pdfaid (richiesto da 6.7.8 / Cor.1)Il risultato è un record TPdfAValidationResult:
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone, oppure pacUnknown per un marcatore PDF/A senza un livello riconosciuto)TPdfAValidationIssues di valori TPdfAValidationIssue che descrive ogni problema trovato. I marcatori strutturali sono pvaiMissingXmpMetadata, pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiEncryptionPresent, pvaiMissingTrailerId, pvaiMissingXmpDates e pvaiMissingExtensionSchema. Segnala anche violazioni a livello di contenuto che l'iniezione dei marcatori non può correggere: pvaiLevelAStructureMissing (una dichiarazione Level A priva di struttura tagged), pvaiJavaScriptPresent, pvaiForbiddenAction, pvaiAdditionalActions, pvaiEmbeddedFilesNonConforming, pvaiLzwUsed, pvaiTransparencyForbidden, pvaiOptionalContentForbidden, pvaiForbiddenAnnotation, pvaiNeedAppearancesTrue, pvaiXfaPresent, pvaiFontNotEmbedded e pvaiUnicodeMappingMissing (una dichiarazione PDF/A-2u / PDF/A-3u i cui font sono privi di /ToUnicode). I controlli ISO 19005 più severi aggiungono pvaiTrappedTrue, pvaiForbiddenActionSubtype, pvaiTransparentColorSpace, pvaiAnnotationDictViolation, pvaiUnembeddedFont, pvaiMixedDeviceColorSpaces, pvaiUndefinedContentOperator, pvaiForbiddenRenderingIntent, pvaiExtGStateTransferFunction, pvaiImageDictionaryViolation, pvaiFormXObjectViolation, pvaiPostScriptOrRefXObject, pvaiAnnotationFlagsViolation, pvaiDeprecatedAction, pvaiMetadataFilterForbidden, pvaiStructElemTypeMissing e pvaiRoleMapMissing. Il round 4 aggiunge 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) e pvaiJpeg2000Violation (PDF/A-2 6.2.8.3). Il round 5 aggiunge pvaiCidFontMissingCidToGidMap (6.3.3.2), pvaiSubsetMissingCharSet (6.3.5), pvaiSubsetMissingCidSet (6.3.5), pvaiWidgetActionForbidden (6.6.1) e pvaiOptionalContentAsKey (PDF/A-2 6.9). Il round 6 aggiunge pvaiNeedsRenderingPresent (PDF/A-2 6.4.2), pvaiDestOutputProfileRef (PDF/A-3 6.2.3), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8), pvaiXmpPacketBytesAttr (6.7.5) e pvaiAnnotationToggleNoView (PDF/A-2 6.3.2). Il round 7 (v1.73.0) aggiunge il livello object-model di Pdfium: pvaiPdfiumFontNotEmbedded (6.3.4, per font FPDFFont_GetIsEmbedded) e pvaiPdfiumUnicodeMapError (6.3.8, per carattere FPDFText_HasUnicodeMapError); questi vengono impostati da TPdf.ValidatePdfA, non dal controllo standalone a livello di byte ValidatePdfACompliance. Il round 8 (v1.74.0) aggiunge pvaiPermissionsViolation (6.1.12), pvaiTransActionForbidden (PDF/A-2 6.5.1) e pvaiPdfiumObjectTransparency (PDF/A-1 6.4 tramite FPDFPageObj_HasTransparency). Il round 9 (v1.75.0) aggiunge pvaiIntegerImplementationLimit (PDF/A-2 6.1.13), pvaiBlendModeNotWhitelisted (PDF/A-2 6.2.10) e pvaiHexStringOddDigits (6.1.6). Il round 10 (v1.76.0) aggiunge pvaiNameNotValidUtf8 (PDF/A-2 6.1.8), pvaiInlineImageLzwForbidden (PDF/A-2 6.1.10) e pvaiTrueTypeDifferencesForbidden (6.3.7). Il round 11 (v1.77.0) aggiunge pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8, object-model di Pdfium), pvaiWordBreakMissing (Level A 6.8.3.2) e pvaiLinkActionMissingTarget (6.6.3)pvaiMissingXmpMetadata indica che la chiave /Metadata del catalogo è assente, illeggibile o non risolve in un dizionario stream con /Type /Metadata e /Subtype /XMLpvaiPdfA1Pdf15Structure segnala i documenti PDF/A-1 che contengono cross-reference stream o object stream PDF 1.5; queste strutture restano valide per PDF/A-2 e PDF/A-3pvaiInlineImageLzwForbidden si applica ai filtri delle immagini inline in ogni parte PDF/A: PDF/A-1 rifiuta /LZWDecode e PDF/A-2 / PDF/A-3 rifiutano anche i valori di filtro delle immagini inline /LZW, /LZWDecode e /CryptpvaiImageDictionaryViolation copre anche le immagini inline PDF/A-2 e PDF/A-3 il cui valore /I o /Interpolate è true, oltre alle violazioni del dizionario Image XObject /Alternates, /OPI e /Interpolate truepvaiAnnotationApDictViolation copre sia i dizionari di aspetto delle annotazioni malformati la cui voce /AP contiene chiavi diverse da /N, sia le annotazioni che richiedono ma sono prive di un dizionario di aspettopvaiInfoXmpValueMismatch segnala almeno un valore Info presente la cui proprietà XMP mappata è assente, ha la forma errata del contenitore RDF, differisce come testo Unicode, contiene una data non valida o rappresenta un istante UTC differenteConformance è un livello PDF/A reale e Issues è vuotoValidatePdfA è un'ispezione in sola lettura — non modifica il documento e può essere chiamato ripetutamente in sicurezza. Usarlo prima di consegnare un PDF a un sistema di archiviazione per evidenziare al gestore la non conformità. Per il comune controllo "di che livello si tratta?" che non richiede l'elenco dei problemi, preferire la proprietà più leggera PdfAConformance
Conformance = pacNone e un array Issues vuoto
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;