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 для каждой страницы должны покрывать дерево страниц ровно один раз в глубину/OutputIntents с OutputIntent, у которого есть /DestOutputProfile (унаследованное требование PDF/X-4)/ID и отсутствие /Encrypt, потому что PDF/X запрещает шифрованиеxmp:CreateDate и xmp:ModifyDate в XMP для согласованности Info / XMPРезультатом является запись TPdfVTValidationResult:
pvc1 (маркер PDF/VT-1), pvc2 (маркер PDF/VT-2), pvcNone (маркера PDF/VT нет) или pvcUnknown (маркер есть, но версия уровня файла не распознана)TPdfVTValidationIssues со значениями от нуля и выше: pvviMissingXmpMetadata, pvviMissingPdfVTIdentifier, pvviMissingExtensionSchema, pvviMissingPdfVTModDate, pvviModDateMismatch, pvviMissingDPartRoot, pvviMissingPdfXIdentifier, pvviMissingOutputIntent, pvviMissingIccProfile, pvviMissingTrailerId, pvviEncryptionPresent, pvviMissingXmpDatesValidatePdfVT работает только на чтение. Он проверяет маркеры формата, выбранную семантику дерева DPart, точную связку баз PDF/VT с PDF/X и свойства XMP независимо от того, записаны они как элементы или как RDF-атрибуты. Для полной проверки на уровне содержимого сочетайте его с preflight-движком PDF/X, а для PDF/VT-2 — с полноценным валидатором file-set. PDF/VT-2s — это уровень соответствия MIME stream, чья версия сигнализируется заголовком MIME stream в ISO 16612-2 Annex A, а не значением уровня файла pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot выдаётся, когда в каталоге нет пригодной иерархии /DPartRoot или когда дерево нарушает требования §6.5, например имеет некорректные массивы /DParts, смешанные /Start и /DParts, дублирование владения дочерними узлами, неверные имена /NodeNameList или несоответствие глубины, диапазоны страниц, которые не следуют порядку дерева страниц, одностраничные диапазоны, повторяющие /Start как /End, или ссылки страниц /DPart, которые не указывают на покрывающий листовой DPartpvviModDateMismatch выдаётся только когда одновременно присутствуют pdfvtid:GTS_PDFVTModDate и xmp:ModifyDate и их значения различаются. SaveAsPdfVT всегда записывает их с одним и тем же значениемValidatePdfVT на неактивном документе возвращает запись с Conformance = pvcUnknown и пустым набором Issuesuses System.TypInfo;
var
Outcome: TPdfVTValidationResult;
Issue: TPdfVTValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\statements.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfVT;
Memo1.Lines.Add('Уровень: ' + GetEnumName(TypeInfo(TPdfVTConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfVTValidationIssue), Ord(Issue)));
end;