function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT pereina per atvertąjį dokumentą ir ieško ISO 16612-2:2010 apibrėžtų failo formato lygio žymų:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) ir pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate ir xmp:ModifyDate lygybę (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 turi būti PDF/X-4 (§6.2.1), o PDF/VT-2 turi naudoti vieną iš failų rinkinio pagrindų PDF/X-4p, PDF/X-5g arba PDF/X-5pg (§6.2.2)pdfaExtension:schemas aprašą abiejoms pdfvtid ir pdfxid vardų erdvėms/DPartRoot įrašą su naudotinu §6.5 DPart medžiu: /DPartRootNode, XML NMTOKEN suderinamas /NodeNameList, tėvines nuorodas, /DParts masyvų masyvą, lapo /Start//End intervalus ir puslapio /DPart nuorodos turi padengti puslapių medį lygiai kartą gilyn einančia tvarkaGTS_XID, GTS_Scope bei GTS_Env reikšmes, netiesioginį DPartRoot RecordLevel, kurį naudoja Record apimtis, ir ribą, būdingą tik PDF/VT-2s, Stream apimčiaiFlateDecode puslapio arba Form XObject srautus, išspręndžiančius kiekvieną Do operandą per veikiančius paveldėtuosius išteklius, kad būtų vykdomos SingleUse skaičiavimo, išteklių matomumo ir vieno gavėjo nuosavybės taisyklės Record apimčiaiIntent, būtinąją izoliuoto skaidrumo Group su maišymo spalvų erdve ir pasirenkamojo turinio pažymėtuosius operatorius tiesioginiame arba įdėtame Form turinyje/OutputIntents masyvą su OutputIntent, turinčiu įterptąjį /DestOutputProfile arba išorinį /DestOutputProfileRef, tinkamą PDF/X pagrindui/ID masyvą ir /Encrypt nebuvimą (PDF/X draudžia šifravimą)xmp:CreateDate ir xmp:ModifyDate įrašus XMP dėl Info / XMP atitikimoRezultatas yra TPdfVTValidationResult įrašas:
pvc1 (PDF/VT-1 žyma), pvc2 (PDF/VT-2 žyma), pvcNone (PDF/VT žymos nėra) arba pvcUnknown (žyma yra, bet failo lygio versija neatpažinta)TPdfVTValidationIssues aibė su nuline arba daugiau žymų, DPart, PDF/X paveldėjimo, pasikartojančių objektų ir įkapsuliavimo problemų reikšmiųpvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords ir pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid ir pvviGtsEncapsulatedOptionalContentConformance yra tikras PDF/VT lygis, o Issues tuščiaValidatePdfVT veikia tik skaitydamas. Jis tikrina failo formato žymas,
pasirinktąsias DPart medžio semantikas, pasikartojančių XObject apimtis ir įkapsuliavimą,
tikslųjį PDF/VT ir PDF/X pagrindo poravimą bei XMP
savybes, nesvarbu, ar jos rašomos kaip elementai, ar kaip RDF atributai. Derinkite
jį su PDF/X paruošimo varikliu pilnam turinio lygio tikrinimui, o PDF/VT-2 — su
InspectPdfVT2sStream arba kitu pilnu failų rinkinio tikrintuvu. PDF/VT-2s yra MIME srauto
atitikties lygis, kurio versija signalizuojama MIME srauto antraštėje
ISO 16612-2 Annex A, o ne failo lygio pdfvtid:GTS_PDFVTVersion
reikšme
pvviMissingDPartRoot iškeliamas, kai kataloge nėra naudotinos /DPartRoot hierarchijos arba kai medis pažeidžia §6.5 reikalavimus, tokius kaip netinkamai suformuoti /DParts masyvai, maišyti /Start ir /DParts, dubliuota antrinių elementų nuosavybė, netinkamos /NodeNameList vardų reikšmės arba gylio nesutapimai, puslapių intervalai, nesekantys puslapių medžio tvarka, vienpuslapiai intervalai, kartojantys /Start kaip /End, arba puslapio /DPart nuorodos, nenurodančios dengiančiojo lapo DPartFlateDecode srautus; turinio srautai su kitokia arba grandinine filtracija lieka prieinami specializuotiems pilno paruošimo varikliamspvviModDateMismatch iškeliamas tik tada, kai ir pdfvtid:GTS_PDFVTModDate, ir xmp:ModifyDate yra, o jų reikšmės skiriasi; SaveAsPdfVT visada rašo jas ta pačia reikšmeConformance = pvcUnknown ir tuščia Issues aibe
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;