function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA pereina per atvertąjį dokumentą ir ieško visų ISO 19005-1 (su Cor.1:2007) apibrėžtų PDF/A atitikties žymų:
pdfaid:part ir pdfaid:conformance įrašais, kurie tikrintuvui pasako, kokiam PDF/A lygiui dokumentas buvo rengiamas (1a, 1b, 2b, 3b, ...)/ID masyvą (privalomas pagal ISO 19005-1 6.1.3)xmp:CreateDate ir xmp:ModifyDate XMP pakete (būtina, kai Info žodyne yra CreationDate / ModDate reikšmės pagal 6.7.3 Example 2)pdfaExtension:schemas konteinerį, apibūdinantį pdfaid išplėtimo schemą (būtina pagal 6.7.8 / Cor.1)Rezultatas yra TPdfAValidationResult įrašas:
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone arba pacUnknown, kai PDF/A žyma be atpažinto lygio)TPdfAValidationIssues aibė iš TPdfAValidationIssue reikšmių, apibūdinančių kiekvieną rastą problemą. Struktūrinės žymos yra pvaiMissingXmpMetadata, pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiEncryptionPresent, pvaiMissingTrailerId, pvaiMissingXmpDates ir pvaiMissingExtensionSchema. Ji taip pat praneša turinio lygio pažeidimus, kurių žymų įterpimas negali ištaisyti: pvaiLevelAStructureMissing (A lygio teiginys be pažymėtos struktūros), pvaiJavaScriptPresent, pvaiForbiddenAction, pvaiAdditionalActions, pvaiEmbeddedFilesNonConforming, pvaiLzwUsed, pvaiTransparencyForbidden, pvaiOptionalContentForbidden, pvaiForbiddenAnnotation, pvaiNeedAppearancesTrue, pvaiXfaPresent, pvaiFontNotEmbedded ir pvaiUnicodeMappingMissing (PDF/A-2u / PDF/A-3u teiginys, kurio šriftai neturi /ToUnicode). Griežtesni ISO 19005 patikrinimai prideda pvaiTrappedTrue, pvaiForbiddenActionSubtype, pvaiTransparentColorSpace, pvaiAnnotationDictViolation, pvaiUnembeddedFont, pvaiMixedDeviceColorSpaces, pvaiUndefinedContentOperator, pvaiForbiddenRenderingIntent, pvaiExtGStateTransferFunction, pvaiImageDictionaryViolation, pvaiFormXObjectViolation, pvaiPostScriptOrRefXObject, pvaiAnnotationFlagsViolation, pvaiDeprecatedAction, pvaiMetadataFilterForbidden, pvaiStructElemTypeMissing ir pvaiRoleMapMissing. 4 etapas prideda 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) ir pvaiJpeg2000Violation (PDF/A-2 6.2.8.3). 5 etapas prideda pvaiCidFontMissingCidToGidMap (6.3.3.2), pvaiSubsetMissingCharSet (6.3.5), pvaiSubsetMissingCidSet (6.3.5), pvaiWidgetActionForbidden (6.6.1) ir pvaiOptionalContentAsKey (PDF/A-2 6.9). 6 etapas prideda pvaiNeedsRenderingPresent (PDF/A-2 6.4.2), pvaiDestOutputProfileRef (PDF/A-3 6.2.3), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8), pvaiXmpPacketBytesAttr (6.7.5) ir pvaiAnnotationToggleNoView (PDF/A-2 6.3.2). 7 etapas (v1.73.0) prideda Pdfium objektų modelio sluoksnį: pvaiPdfiumFontNotEmbedded (6.3.4, kiekvienam šriftui FPDFFont_GetIsEmbedded) ir pvaiPdfiumUnicodeMapError (6.3.8, kiekvienam simboliui FPDFText_HasUnicodeMapError); juos nustato TPdf.ValidatePdfA, o ne atskirasis baitų lygio ValidatePdfACompliance. 8 etapas (v1.74.0) prideda pvaiPermissionsViolation (6.1.12), pvaiTransActionForbidden (PDF/A-2 6.5.1) ir pvaiPdfiumObjectTransparency (PDF/A-1 6.4 per FPDFPageObj_HasTransparency). 9 etapas (v1.75.0) prideda pvaiIntegerImplementationLimit (PDF/A-2 6.1.13), pvaiBlendModeNotWhitelisted (PDF/A-2 6.2.10) ir pvaiHexStringOddDigits (6.1.6). 10 etapas (v1.76.0) prideda pvaiNameNotValidUtf8 (PDF/A-2 6.1.8), pvaiInlineImageLzwForbidden (PDF/A-2 6.1.10) ir pvaiTrueTypeDifferencesForbidden (6.3.7). 11 etapas (v1.77.0) prideda pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8, Pdfium objektų modelis), pvaiWordBreakMissing (Level A 6.8.3.2) ir pvaiLinkActionMissingTarget (6.6.3)pvaiMissingXmpMetadata reiškia, kad katalogo /Metadata rakto nėra, jis neskaitytinas arba nesprendžia į srauto žodyną su /Type /Metadata ir /Subtype /XMLpvaiPdfA1Pdf15Structure praneša apie PDF/A-1 dokumentus, kuriuose yra PDF 1.5 kryžminių nuorodų srautai arba objektų srautai; šios struktūros PDF/A-2 ir PDF/A-3 lieka teisėtospvaiInlineImageLzwForbidden taikoma eilutinių paveikslų filtrams kiekvienoje PDF/A dalyje: PDF/A-1 atmeta /LZWDecode, o PDF/A-2 / PDF/A-3 atmeta ir eilutinių paveikslų /LZW, /LZWDecode bei /Crypt filtro reikšmespvaiImageDictionaryViolation dengia ir PDF/A-2 bei PDF/A-3 eilutinius paveikslus, kurių /I arba /Interpolate reikšmė yra true, be Image XObject /Alternates, /OPI ir /Interpolate true žodynų pažeidimųpvaiAnnotationApDictViolation dengia ir netinkamai suformuotus anotacijų išvaizdų žodynus, kurių /AP įraše yra kiti raktažodžiai nei /N, ir anotacijas, kurioms išvaizdų žodyno reikia, bet jo nėrapvaiInfoXmpValueMismatch praneša apie bent vieną esamą Info reikšmę, kurios atitinkamoji XMP savybė yra dingusi, turi netinkamą RDF konteinerio formą, skiriasi kaip Unicode tekstas, turi netinkamą datą arba nurodo kitokį UTC momentąConformance yra tikras PDF/A lygis, o Issues tuščiaValidatePdfA yra vien skaitymo apžiūra — jos keičia
dokumentą ir gali būti kviečiama ne kartą. Naudokite ją prieš
perduodami PDF archyvo sistemai, kad operatorius išvystų
neatitiktis. Paprastam „kokio lygio tai dokumentas?“ patikrinimui,
kuriam problemų sąrašo nereikia, rinkitės lengvesnę
PdfAConformance ypatybę
Conformance = pacNone ir tuščiu Issues masyvu
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;