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 у каталозі з придатним DPart-деревом §6.5: /DPartRootNode, сумісний з XML NMTOKEN /NodeNameList, батьківські посилання, /DParts масив-масивів, діапазони /Start//End листя та посторінкові посилання /DPart мусять покривати дерево сторінок рівно один раз у depth-first порядкуGTS_XID, GTS_Scope і GTS_Env, непрямим RecordLevel у DPartRoot, який використовує область Record, та межею тільки-для-PDF/VT-2s для області StreamFlateDecode потоки сторінок чи Form XObject з розв'язанням кожного операнда Do через ефективні успадковані ресурси, щоб забезпечити лічильники SingleUse, видимість ресурсів і одноодержувачне володіння для області RecordIntent зображення, потрібна ізольована transparency Group з колірним простором змішування та позначені оператори optional-content у прямому чи вкладеному Form-вмісті/OutputIntents у каталозі з 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 порожнійValidatePdfVT — read-only. Він перевіряє маркери файлового формату,
семантику обраного DPart-дерева, область і інкапсуляцію повторюваних
XObject, точне спарювання основ PDF/VT з PDF/X та властивості XMP
незалежно від того, записані вони як елементи чи атрибути RDF. Поєднуйте
його з preflight-рушієм PDF/X для повної перевірки рівня вмісту, а
для PDF/VT-2 — з InspectPdfVT2sStream чи іншим повним валідатором file-set. PDF/VT-2s — це рівень відповідності MIME-потоку, чия версія сигналізується заголовком MIME-потоку в
ISO 16612-2 Annex A, а не файловим значенням pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot випромінюється, коли в каталозі бракує придатної ієрархії /DPartRoot або дерево порушує вимоги §6.5, як-от некоректні масиви /DParts, змішані /Start і /DParts, подвоєне володіння дітьми, недійсні імена /NodeNameList чи невідповідності глибини, діапазони сторінок, що не слідують порядку дерева сторінок, односторінкові діапазони, які повторюють /Start як /End, або посилання /DPart сторінок, що не вказують на покривний листовий DPartFlateDecode потоки; content streams з іншими чи ланцюговими фільтрами залишаються доступними спеціалізованим 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;