function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA обходить відкритий документ у пошуку кожного маркера відповідності PDF/A, визначеного ISO 19005-1 (з Cor.1:2007):
pdfaid:part і pdfaid:conformance, який повідомляє валідатору, проти якого рівня PDF/A створювався документ (1a, 1b, 2b, 3b, ...)/ID у trailer (обов'язковий згідно з ISO 19005-1 6.1.3)xmp:CreateDate і xmp:ModifyDate в XMP-пакеті (потрібні, коли словник Info тримає значення CreationDate / ModDate згідно з 6.7.3 Example 2)pdfaExtension:schemas, що описує extension schema pdfaid (потрібний згідно з 6.7.8 / Cor.1)Результатом є запис TPdfAValidationResult:
pac1a, pac1b, pac2a, pac2b, pac2u, pac3a, pac3b, pac3u, pacNone або pacUnknown для маркера PDF/A без розпізнаного рівня)TPdfAValidationIssues зі значень TPdfAValidationIssue, що описує кожну знайдену проблему. Структурні маркери: pvaiMissingXmpMetadata, pvaiMissingPdfAIdentifier, pvaiMissingOutputIntent, pvaiMissingIccProfile, pvaiEncryptionPresent, pvaiMissingTrailerId, pvaiMissingXmpDates і pvaiMissingExtensionSchema. Він також звітує порушення рівня вмісту, які неможливо виправити ін'єкцією маркерів: pvaiLevelAStructureMissing (заявка Level A без тегованої структури), pvaiJavaScriptPresent, pvaiForbiddenAction, pvaiAdditionalActions, pvaiEmbeddedFilesNonConforming, pvaiLzwUsed, pvaiTransparencyForbidden, pvaiOptionalContentForbidden, pvaiForbiddenAnnotation, pvaiNeedAppearancesTrue, pvaiXfaPresent, pvaiFontNotEmbedded і pvaiUnicodeMappingMissing (заявка PDF/A-2u / PDF/A-3u, чиї шрифти не мають /ToUnicode). Суворіші перевірки ISO 19005 додають pvaiTrappedTrue, pvaiForbiddenActionSubtype, pvaiTransparentColorSpace, pvaiAnnotationDictViolation, pvaiUnembeddedFont, pvaiMixedDeviceColorSpaces, pvaiUndefinedContentOperator, pvaiForbiddenRenderingIntent, pvaiExtGStateTransferFunction, pvaiImageDictionaryViolation, pvaiFormXObjectViolation, pvaiPostScriptOrRefXObject, pvaiAnnotationFlagsViolation, pvaiDeprecatedAction, pvaiMetadataFilterForbidden, pvaiStructElemTypeMissing і pvaiRoleMapMissing. Раунд 4 додає 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) і pvaiJpeg2000Violation (PDF/A-2 6.2.8.3). Раунд 5 додає pvaiCidFontMissingCidToGidMap (6.3.3.2), pvaiSubsetMissingCharSet (6.3.5), pvaiSubsetMissingCidSet (6.3.5), pvaiWidgetActionForbidden (6.6.1) і pvaiOptionalContentAsKey (PDF/A-2 6.9). Раунд 6 додає pvaiNeedsRenderingPresent (PDF/A-2 6.4.2), pvaiDestOutputProfileRef (PDF/A-3 6.2.3), pvaiEmbeddedFileMissingUF (PDF/A-3 6.8), pvaiXmpPacketBytesAttr (6.7.5) і pvaiAnnotationToggleNoView (PDF/A-2 6.3.2). Раунд 7 (v1.73.0) додає шар моделі об'єктів Pdfium: pvaiPdfiumFontNotEmbedded (6.3.4, на кожен шрифт FPDFFont_GetIsEmbedded) і pvaiPdfiumUnicodeMapError (6.3.8, на кожен символ FPDFText_HasUnicodeMapError); їх встановлює TPdf.ValidatePdfA, а не окремий байт-рівневий ValidatePdfACompliance. Раунд 8 (v1.74.0) додає pvaiPermissionsViolation (6.1.12), pvaiTransActionForbidden (PDF/A-2 6.5.1) і pvaiPdfiumObjectTransparency (PDF/A-1 6.4 через FPDFPageObj_HasTransparency). Раунд 9 (v1.75.0) додає pvaiIntegerImplementationLimit (PDF/A-2 6.1.13), pvaiBlendModeNotWhitelisted (PDF/A-2 6.2.10) і pvaiHexStringOddDigits (6.1.6). Раунд 10 (v1.76.0) додає pvaiNameNotValidUtf8 (PDF/A-2 6.1.8), pvaiInlineImageLzwForbidden (PDF/A-2 6.1.10) і pvaiTrueTypeDifferencesForbidden (6.3.7). Раунд 11 (v1.77.0) додає pvaiPdfiumNotDefGlyph (PDF/A-2 6.2.11.8, модель об'єктів Pdfium), pvaiWordBreakMissing (Level A 6.8.3.2) і pvaiLinkActionMissingTarget (6.6.3)pvaiMissingXmpMetadata означає, що ключ /Metadata каталогу відсутній, нечитабельний або не розв'язується у потоковий словник з /Type /Metadata і /Subtype /XMLpvaiPdfA1Pdf15Structure звітує про документи PDF/A-1, що містять cross-reference streams або object streams PDF 1.5; ці структури залишаються дійсними для PDF/A-2 і PDF/A-3pvaiInlineImageLzwForbidden застосовується до фільтрів inline-image у кожній частині PDF/A: PDF/A-1 відкидає /LZWDecode, а PDF/A-2 / PDF/A-3 також відкидають inline-image значення фільтрів /LZW, /LZWDecode і /CryptpvaiImageDictionaryViolation також покриває inline-image зображення PDF/A-2 і PDF/A-3, чиї значення /I або /Interpolate дорівнюють true, додатково до порушень словника Image XObject /Alternates, /OPI і /Interpolate truepvaiAnnotationApDictViolation покриває як некоректні словники appearance анотацій, чиї записи /AP містять ключі, відмінні від /N, так і анотації, що потребують, але не мають словника appearancepvaiInfoXmpValueMismatch звітує про щонайменше одне наявне значення Info, чия відображена властивість XMP відсутня, має неправильну форму RDF-контейнера, відрізняється як текст Unicode, містить недійсну дату або представляє інший момент UTCConformance є справжнім рівнем PDF/A, а Issues порожнійValidatePdfA — read-only інспекція — вона не модифікує
документ і безпечна для повторних викликів. Застосовуйте її, перш ніж
передавати PDF в архівну систему, щоб виявити невідповідність для
оператора. Для поширеного запиту «який це рівень?», що не потребує
списку проблем, надайте перевагу легшій
властивості PdfAConformance
Conformance = pacNone і порожнім масивом Issues
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;