function ValidatePdfA: TPdfAValidationResult;
ValidatePdfA سند باز را میپیماید و هر نشانگر انطباق PDF/A تعریفشده در ISO 19005-1 (با Cor.1:2007) را جستوجو میکند:
pdfaid:part و pdfaid:conformance که به اعتبارسنج میگوید سند بر اساس کدام سطح PDF/A نوشته شده است (1a، 1b، 2b، 3b، ...)/ID در trailer (الزامی طبق بند 6.1.3 از ISO 19005-1)xmp:CreateDate و xmp:ModifyDate در بستهٔ XMP (لازم است وقتی دیکشنری Info مطابق بند 6.7.3 مثال 2 مقادیر CreationDate / ModDate دارد)pdfaExtension:schemas که شِمای افزونهٔ 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 (پیوست E.2 از PDF/A-3) و 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 در catalog غایب است، خوانا نیست یا به یک دیکشنری stream با /Type /Metadata و /Subtype /XML حل نمیشودpvaiPdfA1Pdf15Structure سندهای PDF/A-1 را گزارش میکند که شامل cross-reference streamها یا object streamهای PDF 1.5 هستند؛ این ساختارها برای PDF/A-2 و PDF/A-3 همچنان معتبرندpvaiInlineImageLzwForbidden روی فیلترهای تصویر درونخطی در همهٔ بخشهای PDF/A اعمال میشود: PDF/A-1 مقادیر /LZWDecode را رد میکند و PDF/A-2 / PDF/A-3 مقادیر فیلتر /LZW، /LZWDecode و /Crypt در تصاویر درونخطی را هم رد میکنندpvaiImageDictionaryViolation علاوه بر نقضهای دیکشنری /Alternates، /OPI و /Interpolate true در Image XObject، تصاویر درونخطی PDF/A-2 و PDF/A-3 را هم پوشش میدهد که مقدار /I یا /Interpolate آنها true استpvaiAnnotationApDictViolation هم دیکشنریهای ظاهر حاشیهنویسی بدساخت را پوشش میدهد که ورودی /APشان کلیدهایی غیر از /N دارد و هم حاشیهنویسیهایی که به دیکشنری ظاهر نیاز دارند اما آن را ندارندpvaiInfoXmpValueMismatch دستکم یک مقدار Info موجود را گزارش میکند که ویژگی XMP نگاشتشدهاش غایب است، شکل ظرف RDF اشتباهی دارد، بهعنوان متن Unicode تفاوت دارد، تاریخ نامعتبری دارد یا لحظهٔ UTC متفاوتی را نشان میدهدConformance یک سطح واقعی PDF/A باشد و Issues خالی باشد True برمیگرداندValidatePdfA یک بازرسی فقطخواندنی است — سند را تغییر نمیدهد و فراخوانی مکرر آن بیخطر است. پیش از تحویل یک
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;