function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT går igenom det öppna dokumentet och letar efter de markörer på filformatsnivå som definieras av ISO 16612-2:2010:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) och pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate och xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 måste vara PDF/X-4 (§6.2.1), medan PDF/VT-2 måste använda någon av filuppsättningsbaserna PDF/X-4p, PDF/X-5g eller PDF/X-5pg (§6.2.2)pdfaExtension:schemas för både pdfvtid- och pdfxid-namnrymderna/DPartRoot med ett användbart §6.5 DPart-träd: /DPartRootNode, XML NMTOKEN-kompatibla /NodeNameList, föräldralänkar, /DParts-array-av-arrayer, bladens /Start-//End-intervall och per-sida-referenserna /DPart måste täcka sidträdet exakt en gång i depth-first-ordningGTS_XID, GTS_Scope och GTS_Env, den indirekta DPartRoot-RecordLevel som Record-scopet använder, samt PDF/VT-2s-gränsen för Stream-scopeFlateDecode-sid- eller Form XObject-strömmar, där varje Do-operand slås upp via effektiva ärvda resurser för att framtvinga SingleUse-räkningar, resurssynlighet och ensam-mottagarägande för Record-scopeIntent, obligatorisk isolerad transparens-Group med en blending-färgrymd samt optional content-markerade operatorer i direkt eller nästlat Form-innehåll/OutputIntents med en OutputIntent som har en inbäddad /DestOutputProfile eller en extern /DestOutputProfileRef som passar PDF/X-basen/ID-array och avsaknad av /Encrypt (PDF/X förbjuder kryptering)xmp:CreateDate och xmp:ModifyDate i XMP för Info-/XMP-paritetResultatet är en post av typen TPdfVTValidationResult:
pvc1 (PDF/VT-1-markör), pvc2 (PDF/VT-2-markör), pvcNone (ingen PDF/VT-markör) eller pvcUnknown (markör finns men filnivåversionen är okänd)TPdfVTValidationIssues med noll eller flera problemvärden för markörer, DPart, PDF/X-arv, återkommande objekt och inkapslingpvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords och pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid och pvviGtsEncapsulatedOptionalContentConformance är en verklig PDF/VT-nivå och Issues är tomValidatePdfVT är skrivskyddad. Den kontrollerar filformatsmarkörerna,
valda semantiska regler för DPart-trädet, scope och inkapsling för
återkommande XObject, exakt PDF/VT-till-PDF/X-basparning samt
XMP-egenskaper vare sig de skrivs som element eller RDF-attribut. Para
ihop den med en PDF/X-preflightmotor för fullständig verifiering på
innehållsnivå och, för PDF/VT-2, InspectPdfVT2sStream eller en annan komplett validerare för filuppsättningar. PDF/VT-2s är en överensstämmelsenivå för MIME-strömmar
vars version signaleras av MIME-strömheadern i
ISO 16612-2 Annex A, inte av ett filnivåvärde för
pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot genereras när catalog saknar en användbar /DPartRoot-hierarki eller när trädet bryter mot kraven i §6.5, exempelvis felformade /DParts-arrayer, blandning av /Start och /DParts, dubblettdeklarerat barnägande, ogiltiga /NodeNameList-namn eller djupavvikelser, sidintervall som inte följer sidträdets ordning, ensidiga intervall som upprepar /Start som /End eller sidans /DPart-länkar som inte pekar på det täckande bladetFlateDecode-strömmar; innehållsströmmar med andra eller kedjade filter förblir tillgängliga för dedikerade fullständiga preflightmotorerpvviModDateMismatch genereras endast när både pdfvtid:GTS_PDFVTModDate och xmp:ModifyDate finns och deras värden avviker; SaveAsPdfVT skriver alltid dem med samma värdeConformance = pvcUnknown och en tom Issues-mängd
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;