function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT przechodzi przez otwarty dokument w poszukiwaniu znaczników poziomu formatu pliku zdefiniowanych w ISO 16612-2:2010:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) i pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate a xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 musi być PDF/X-4 (§6.2.1), a PDF/VT-2 musi użyć jednej z baz zestawu plików PDF/X-4p, PDF/X-5g lub PDF/X-5pg (§6.2.2)pdfaExtension:schemas dla obu przestrzeni nazw, pdfvtid i pdfxid/DPartRoot w katalogu z użytecznym drzewem DPart z §6.5: /DPartRootNode, zgodna z XML NMTOKEN /NodeNameList, powiązania do rodziców, /DParts jako tablica tablic, zakresy liści /Start//End i odwołania /DPart per strona muszą pokryć drzewo stron dokładnie raz w kolejności w głąbGTS_XID, GTS_Scope i GTS_Env, pośredni RecordLevel w DPartRoot używany przez zakres Record oraz granica wyłącznie dla PDF/VT-2s dla zakresu StreamFlateDecode, z rozwiązywaniem każdego operandu Do przez efektywne dziedziczone zasoby, aby wymusić zliczanie SingleUse, widoczność zasobów i własność jednego odbiorcy dla zakresu RecordIntent obrazu, wymagana izolowana grupa przezroczystości Group z przestrzenią kolorów mieszania oraz oznaczone operatory zawartości opcjonalnej w treści Form bezpośredniej lub zagnieżdżonej/OutputIntents w katalogu z OutputIntent mającym osadzony /DestOutputProfile albo zewnętrzny /DestOutputProfileRef odpowiedni dla bazy PDF/X/ID w trailerze i brak /Encrypt (PDF/X zabrania szyfrowania)xmp:CreateDate i xmp:ModifyDate w XMP dla zgodności Info / XMPWynikiem jest rekord TPdfVTValidationResult:
pvc1 (znacznik PDF/VT-1), pvc2 (znacznik PDF/VT-2), pvcNone (brak znacznika PDF/VT) lub pvcUnknown (znacznik obecny, ale wersja na poziomie pliku nierozpoznana)TPdfVTValidationIssues z zerem lub większą liczbą wartości problemów znaczników, DPart, dziedziczenia PDF/X, obiektów powtarzalnych i hermetyzacjipvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords i pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid i pvviGtsEncapsulatedOptionalContentConformance jest rzeczywistym poziomem PDF/VT, a Issues jest pustyValidatePdfVT jest tylko do odczytu. Sprawdza znaczniki formatu pliku,
wybraną semantykę drzewa DPart, zakres i hermetyzację powtarzalnych
XObject, dokładne parowanie bazy PDF/VT z PDF/X oraz właściwości XMP
— czy zapisane jako elementy, czy jako atrybuty RDF. Do pełnej
weryfikacji na poziomie zawartości sparuj ją z silnikiem preflight
PDF/X, a dla PDF/VT-2 z InspectPdfVT2sStream albo innym kompletnym walidatorem zestawu plików. PDF/VT-2s to poziom
zgodności strumienia MIME, którego wersja jest sygnalizowana przez
nagłówek strumienia MIME w Annex A ISO 16612-2, a nie przez wartość
pdfvtid:GTS_PDFVTVersion na poziomie pliku
pvviMissingDPartRoot jest zgłaszany, gdy katalogowi brakuje użytecznej hierarchii /DPartRoot albo gdy drzewo narusza wymagania §6.5, takie jak wadliwe tablice /DParts, zmieszane /Start i /DParts, zdublowana własność dzieci, niepoprawne nazwy /NodeNameList lub niezgodne głębokości, zakresy stron niepodążające za kolejnością drzewa stron, jednostronicowe zakresy powtarzające /Start jako /End albo odwołania /DPart strony niekierujące na pokrywający liść DPartFlateDecode; strumienie zawartości z innymi lub łańcuchowymi filtrami pozostają dostępne dla dedykowanych silników pełnego preflightpvviModDateMismatch jest zgłaszany tylko wtedy, gdy zarówno pdfvtid:GTS_PDFVTModDate, jak i xmp:ModifyDate są obecne i ich wartości się różnią; SaveAsPdfVT zawsze zapisuje je z tą samą wartościąConformance = pvcUnknown i pustym zbiorem 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;