function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT doorloopt het geopende document op zoek naar de markers op bestandsformaatniveau die ISO 16612-2:2010 definieert:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) en pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate en xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 moet PDF/X-4 zijn (§6.2.1), terwijl PDF/VT-2 een van de file-set-bases PDF/X-4p, PDF/X-5g of PDF/X-5pg moet gebruiken (§6.2.2)pdfaExtension:schemas-beschrijving voor zowel de pdfvtid- als de pdfxid-namespace/DPartRoot met een bruikbare §6.5 DPart-boom: de /DPartRootNode, XML NMTOKEN-compatibele /NodeNameList, ouderverwijzingen, de /DParts-array-van-arrays, bladbereiken /Start//End en per-pagina /DPart-verwijzingen moeten de page-tree exact één keer afdekken in depth-first-volgordeGTS_XID, GTS_Scope en GTS_Env, het indirecte DPartRoot-RecordLevel dat door scope Record wordt gebruikt, en de uitsluitend voor PDF/VT-2s geldende grens voor scope StreamFlateDecode pagina- of Form XObject-streams, waarbij elke Do-operand via effectieve overgeërfde resources wordt geresolvet om SingleUse-aantallen, resourcezichtbaarheid en single-recipient-eigendom voor scope Record af te dwingenIntent, de vereiste isolated transparency Group met een blending-kleurruimte en marked operators voor optional content in directe of geneste Form-content/OutputIntents met een OutputIntent die een ingesloten /DestOutputProfile of externe /DestOutputProfileRef heeft die past bij de PDF/X-base/ID-array en de afwezigheid van /Encrypt (PDF/X verbiedt versleuteling)xmp:CreateDate- en xmp:ModifyDate-items in XMP voor Info / XMP-pariteitHet resultaat is een TPdfVTValidationResult-record:
pvc1 (PDF/VT-1-marker), pvc2 (PDF/VT-2-marker), pvcNone (geen PDF/VT-marker) of pvcUnknown (marker aanwezig maar versie op bestandsniveau niet herkend)TPdfVTValidationIssues-verzameling met nul of meer marker-, DPart-, PDF/X-overerving-, terugkerend-object- en encapsulation-probleemwaardenpvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords en pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid en pvviGtsEncapsulatedOptionalContentConformance een echt PDF/VT-niveau is en Issues leeg isValidatePdfVT is alleen-lezen. Het controleert de markers op bestandsformaatniveau, de geselecteerde DPart-boomsemantiek, scope en encapsulation van terugkerende XObjects, de exacte PDF/VT-naar-PDF/X-base-koppeling en de XMP-eigenschappen, of die nu als elementen of als RDF-attributen zijn geschreven. Combineer het met een PDF/X-preflight-engine voor volledige verificatie op contentniveau en, voor PDF/VT-2, met InspectPdfVT2sStream of een andere volledige file-set-validator. PDF/VT-2s is een MIME-stream-conformiteitsniveau waarvan de versie wordt gesignaleerd door de MIME-streamheader in ISO 16612-2 Annex A, niet door een waarde pdfvtid:GTS_PDFVTVersion op bestandsniveau
pvviMissingDPartRoot wordt gegenereerd wanneer de catalogus een bruikbare /DPartRoot-hiërarchie mist of wanneer de boom de §6.5-eisen schendt, zoals misvormde /DParts-arrays, gemengde /Start en /DParts, dubbel kinderschap, ongeldige /NodeNameList-namen of diepte-mismatches, paginabereiken die niet de paginaboomvolgorde volgen, éénpaginabereiken die /Start herhalen als /End, of pagina-/DPart-verwijzingen die niet naar het dekkende blad-DPart wijzenFlateDecode-streams; contentstreams met andere of gekoppelde filters blijven beschikbaar voor gespecialiseerde volledige preflight-enginespvviModDateMismatch wordt alleen gegenereerd wanneer zowel pdfvtid:GTS_PDFVTModDate als xmp:ModifyDate aanwezig zijn en hun waarden afwijken; SaveAsPdfVT schrijft ze altijd met dezelfde waardeConformance = pvcUnknown en een lege Issues-verzameling
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;