function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT سند باز را میپیماید و نشانگرهای سطح قالب فایل تعریفشده در ISO 16612-2:2010 را جستوجو میکند:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) و pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate و xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 باید PDF/X-4 باشد (§6.2.1)، در حالی که PDF/VT-2 باید از مبناهای file-set یعنی PDF/X-4p، PDF/X-5g یا PDF/X-5pg استفاده کند (§6.2.2)pdfaExtension:schemas برای هر دو فضاینام pdfvtid و pdfxid/DPartRoot در catalog با یک درخت DPart قابل استفاده در §6.5: /DPartRootNode، /NodeNameList سازگار با NMTOKEN در XML، پیوندهای والد، آرایهٔ آرایهها /DParts، بازههای برگ /Start//End و ارجاعهای /DPart بهازای هر صفحه باید درخت صفحه را دقیقاً یک بار به ترتیب depth-first پوشش دهندGTS_XID، GTS_Scope و GTS_Env، RecordLevel غیرمستقیمِ DPartRoot که دامنهٔ Record به کار میبرد و مرز مخصوص PDF/VT-2s برای دامنهٔ StreamFlateDecode که هر عملوند Do از طریق منابع ارثی مؤثر حل میشود تا شمارندههای SingleUse، دیدهشدن منابع و مالکیت تکگیرنده برای دامنهٔ Record اجرا شوندIntent تصویر، Group شفافیت ایزولهٔ الزامی با یک فضای رنگ blending و عملگرهای marked در optional content، در محتوای مستقیم یا تودرتوی Form/OutputIntents در catalog با یک OutputIntent که /DestOutputProfile درونساخت یا /DestOutputProfileRef بیرونیِ مناسب برای مبنای PDF/X داشته باشد/ID در trailer و نبود /Encrypt (PDF/X رمزگذاری را ممنوع میکند)xmp:CreateDate و xmp:ModifyDate در XMP برای همترازی Info / XMPنتیجه یک رکورد TPdfVTValidationResult است:
pvc1 (نشانگر PDF/VT-1)، pvc2 (نشانگر PDF/VT-2)، pvcNone (بدون هیچ نشانگر PDF/VT) یا pvcUnknown (نشانگر حاضر است اما نسخهٔ سطح فایل شناسایی نشده)TPdfVTValidationIssues با صفر یا چند مقدار مشکلِ نشانگر، DPart، وراثت PDF/X، شیء تکراری و کپسولهسازیpvviGtsScopeInvalidValue، pvviGtsScopeRecordWithoutRecordLevel، pvviGtsXidNotUuid، pvviGtsEnvMissing، pvviGtsXidInvalidType، pvviGtsEnvInvalidType، pvviGtsScopeStreamInVT1، pvviGtsScopeSingleUseRepeated، pvviGtsScopeRecordCrossesRecords و pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType، pvviGtsEncapsulatedMissingScope، pvviGtsEncapsulatedImageMissingIntent، pvviGtsEncapsulatedGroupInvalid و pvviGtsEncapsulatedOptionalContentConformance یک سطح واقعی PDF/VT باشد و Issues خالی باشد True برمیگرداندValidatePdfVT فقطخواندنی است. نشانگرهای قالب فایل، معناشناسی درخت DPart انتخابشده، دامنه و
کپسولهسازی XObject تکراری، جفتسازی دقیق PDF/VT به PDF/X و ویژگیهای XMP را بررسی میکند،
چه بهصورت عنصر نوشته شده باشند و چه بهصورت ویژگی RDF. برای راستیآزمایی کامل در سطح محتوا آن را با یک
موتور preflight مربوط به PDF/X و برای PDF/VT-2 با InspectPdfVT2sStream یا اعتبارسنج کامل دیگری از file-set
همراه کنید. PDF/VT-2s یک سطح انطباق جریان MIME است که نسخهاش با header جریان MIME در
پیوست A از ISO 16612-2 علامت داده میشود، نه با یک مقدار سطح فایلِ pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot وقتی صادر میشود که catalog فاقد سلسلهمراتب قابل استفادهٔ /DPartRoot باشد یا درخت، الزامات §6.5 مثل آرایههای /DParts بدساخت، ترکیب /Start و /DParts، مالکیت تکراری فرزند، نامهای نامعتبر /NodeNameList یا ناهمخوانی عمق، بازههای صفحهای که از ترتیب درخت صفحه پیروی نمیکنند، بازههای تکصفحهای که /Start را بهعنوان /End تکرار میکنند یا پیوندهای /DPart صفحه که به برگ پوششدهنده اشاره نمیکنند را نقض کندFlateDecode مستقیم را پویش میکند؛ content streamهایی با فیلترهای دیگر یا زنجیرهای برای موتورهای full-preflight تخصصی در دسترس میمانندpvviModDateMismatch فقط وقتی صادر میشود که هر دو pdfvtid:GTS_PDFVTModDate و xmp:ModifyDate حاضر باشند و مقادیرشان متفاوت باشد؛ SaveAsPdfVT همیشه این دو را با مقدار یکسان مینویسدConformance = pvcUnknown و مجموعهٔ خالی Issues برمیگرداند
uses System.TypInfo;
var
Outcome: TPdfVTValidationResult;
Issue: TPdfVTValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\statements.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfVT;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfVTConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfVTValidationIssue), Ord(Issue)));
end;