function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT percorre il documento aperto alla ricerca dei marcatori a livello di formato file definiti da ISO 16612-2:2010:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) e pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate e xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 deve essere PDF/X-4 (§6.2.1), mentre PDF/VT-2 deve usare una delle basi di file-set PDF/X-4p, PDF/X-5g o PDF/X-5pg (§6.2.2)pdfaExtension:schemas per entrambi i namespace pdfvtid e pdfxid/DPartRoot nel catalogo con un albero DPart §6.5 utilizzabile: il /DPartRootNode, la /NodeNameList compatibile con NMTOKEN XML, i collegamenti ai padri, l'array-of-arrays /DParts, gli intervalli foglia /Start//End e i riferimenti /DPart per pagina devono coprire l'albero delle pagine esattamente una volta in ordine depth-firstGTS_XID, GTS_Scope e GTS_Env, il RecordLevel indiretto del DPartRoot usato dall'ambito Record e il confine riservato a PDF/VT-2s per l'ambito StreamFlateDecode decodificati, risolvendo ogni operando Do attraverso le risorse ereditate effettive per far rispettare i conteggi SingleUse, la visibilità delle risorse e la proprietà a destinatario singolo per l'ambito RecordIntent dell'Image, Group di trasparenza isolato richiesto con uno spazio colore di blending e operatori marked di optional content nel contenuto Form diretto o annidato/OutputIntents nel catalogo con un OutputIntent che ha un /DestOutputProfile incorporato o un /DestOutputProfileRef esterno appropriato per la base PDF/X/ID nel trailer e l'assenza di /Encrypt (il PDF/X vieta la crittografia)xmp:CreateDate e xmp:ModifyDate in XMP per la parità Info / XMPIl risultato è un record TPdfVTValidationResult:
pvc1 (marcatore PDF/VT-1), pvc2 (marcatore PDF/VT-2), pvcNone (nessun marcatore PDF/VT) o pvcUnknown (marcatore presente ma versione a livello di file non riconosciuta)TPdfVTValidationIssues con zero o più valori di problemi su marcatori, DPart, ereditarietà PDF/X, oggetti ricorrenti e incapsulamentopvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords e pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid e pvviGtsEncapsulatedOptionalContentConformance è un livello PDF/VT reale e Issues è vuotoValidatePdfVT è in sola lettura. Verifica i marcatori del formato file,
la semantica selezionata dell'albero DPart, l'ambito e l'incapsulamento
degli XObject ricorrenti, l'abbinamento esatto base PDF/VT-to-PDF/X e le proprietà
XMP siano scritte come elementi o attributi RDF. Abbinarlo
a un motore di preflight PDF/X per la verifica completa a livello di contenuto e,
per PDF/VT-2, a InspectPdfVT2sStream o a un altro validatore completo di file-set. PDF/VT-2s è un livello di
conformità di stream MIME la cui versione è segnalata dall'header dello stream MIME in
ISO 16612-2 Annex A, non da un valore pdfvtid:GTS_PDFVTVersion a livello di file
pvviMissingDPartRoot viene emesso quando il catalogo è privo di una gerarchia /DPartRoot utilizzabile o quando l'albero viola i requisiti §6.5 come array /DParts malformati, /Start e /DParts misti, proprietà dei figli duplicata, nomi /NodeNameList non validi o profondità non corrispondenti, intervalli di pagina che non rispettano l'ordine dell'albero delle pagine, intervalli a pagina singola che ripetono /Start come /End o collegamenti /DPart di pagina che non puntano alla foglia DPart di coperturaFlateDecode diretti; gli stream di contenuto con altri filtri o filtri concatenati restano disponibili per i motori di preflight completi dedicatipvviModDateMismatch viene emesso solo quando pdfvtid:GTS_PDFVTModDate e xmp:ModifyDate sono entrambi presenti e i loro valori differiscono; SaveAsPdfVT li scrive sempre con lo stesso valoreConformance = pvcUnknown e un insieme Issues vuoto
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;