function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT recorre el documento abierto buscando los marcadores a nivel de formato de archivo definidos por ISO 16612-2:2010:
pdfvtid:GTS_PDFVTVersion (§6.3 Table 2) y pdfvtid:GTS_PDFVTModDatepdfvtid:GTS_PDFVTModDate y xmp:ModifyDate (§6.3 NOTE 1)pdfxid:GTS_PDFXVersion — PDF/VT-1 debe ser PDF/X-4 (§6.2.1), mientras que PDF/VT-2 debe usar una de las bases de conjunto de archivos PDF/X-4p, PDF/X-5g o PDF/X-5pg (§6.2.2)pdfaExtension:schemas para los espacios de nombres pdfvtid y pdfxid/DPartRoot del catálogo con un árbol DPart utilizable según §6.5: el /DPartRootNode, la /NodeNameList compatible con NMTOKEN de XML, los enlaces padre, la matriz de matrices /DParts, los rangos hoja /Start//End y las referencias /DPart por página deben cubrir el árbol de páginas exactamente una vez en orden de profundidadGTS_XID, GTS_Scope y GTS_Env, el RecordLevel indirecto del DPartRoot usado por el ámbito Record, y el límite exclusivo de PDF/VT-2s para el ámbito StreamFlateDecode, resolviendo cada operando Do a través de los recursos heredados efectivos para imponer los recuentos SingleUse, la visibilidad de recursos y la propiedad de destinatario único para el ámbito RecordIntent de imagen, Group de transparencia aislado requerido con un espacio de color de mezcla, y operadores marcados de contenido opcional en contenido Form directo o anidado/OutputIntents del catálogo con un OutputIntent que tenga un /DestOutputProfile incrustado o un /DestOutputProfileRef externo apropiado para la base PDF/X/ID en el trailer y la ausencia de /Encrypt (PDF/X prohíbe el cifrado)xmp:CreateDate y xmp:ModifyDate en XMP para la paridad Info / XMPEl resultado es un registro TPdfVTValidationResult:
pvc1 (marcador PDF/VT-1), pvc2 (marcador PDF/VT-2), pvcNone (sin marcador PDF/VT) o pvcUnknown (marcador presente pero versión a nivel de archivo no reconocida)TPdfVTValidationIssues con cero o más valores de problemas de marcadores, DPart, herencia PDF/X, objetos recurrentes y encapsulaciónpvviGtsScopeInvalidValue, pvviGtsScopeRecordWithoutRecordLevel, pvviGtsXidNotUuid, pvviGtsEnvMissing, pvviGtsXidInvalidType, pvviGtsEnvInvalidType, pvviGtsScopeStreamInVT1, pvviGtsScopeSingleUseRepeated, pvviGtsScopeRecordCrossesRecords y pvviGtsResourceNotVisiblepvviGtsEncapsulatedInvalidType, pvviGtsEncapsulatedMissingScope, pvviGtsEncapsulatedImageMissingIntent, pvviGtsEncapsulatedGroupInvalid y pvviGtsEncapsulatedOptionalContentConformance es un nivel real de PDF/VT y Issues está vacíoValidatePdfVT es de solo lectura. Comprueba los marcadores del
formato de archivo, la semántica seleccionada del árbol DPart, el ámbito y la encapsulación de
XObjects recurrentes, el emparejamiento exacto PDF/VT a base PDF/X y las propiedades
XMP tanto si se escriben como elementos o como atributos RDF. Combínelo
con un motor de preflight PDF/X para una verificación completa a nivel de contenido y,
para PDF/VT-2, con InspectPdfVT2sStream u otro validador completo de conjuntos de archivos. PDF/VT-2s es un nivel de
conformidad de flujo MIME cuya versión se señala mediante la cabecera del
flujo MIME en ISO 16612-2 Annex A, no mediante un valor
pdfvtid:GTS_PDFVTVersion a nivel de archivo
pvviMissingDPartRoot se emite cuando el catálogo carece de una jerarquía /DPartRoot utilizable o cuando el árbol viola los requisitos de §6.5, tales como matrices /DParts mal formadas, /Start y /DParts mezclados, propiedad de hijos duplicada, nombres /NodeNameList inválidos o discrepancias de profundidad, rangos de páginas que no siguen el orden del árbol de páginas, rangos de una sola página que repiten /Start como /End, o enlaces /DPart de página que no apuntan al DPart hoja cubridorFlateDecode directos; los flujos de contenido con otros filtros o con filtros encadenados siguen estando disponibles para los motores de preflight completos dedicadospvviModDateMismatch se emite solo cuando tanto pdfvtid:GTS_PDFVTModDate como xmp:ModifyDate están presentes y sus valores difieren; SaveAsPdfVT siempre los escribe con el mismo valorConformance = pvcUnknown y un conjunto Issues vacío
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;