function ValidatePdfVT: TPdfVTValidationResult;
ValidatePdfVT recorre el documento abierto buscando los marcadores de 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 de padre, el arreglo de arreglos /DParts, los rangos de hojas /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 de DPartRoot que usa el ámbito Record y el límite exclusivo de PDF/VT-2s para el ámbito StreamFlateDecode decodificados, resolviendo cada operando Do a través de los recursos heredados efectivos para aplicar los conteos de SingleUse, la visibilidad de recursos y la propiedad de destinatario único del ámbito RecordIntent de Image, el Group de transparencia aislada requerido con un espacio de color de fusión y los 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 de formato de
archivo, la semántica del árbol DPart seleccionado, el ámbito y la encapsulación
de XObjects recurrentes, el emparejamiento exacto de base PDF/VT a PDF/X y las
propiedades XMP tanto si se escriben como elementos o como atributos RDF. Empárelo
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 el encabezado del
flujo MIME en el Annex A de ISO 16612-2, no mediante un valor a nivel de
archivo pdfvtid:GTS_PDFVTVersion
pvviMissingDPartRoot se emite cuando el catálogo carece de una jerarquía /DPartRoot utilizable o cuando el árbol viola los requisitos de §6.5, como arreglos /DParts mal formados, /Start y /DParts mezclados, propiedad de hijos duplicada, nombres /NodeNameList inválidos o desajustes 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 a la hoja DPart que cubre la páginaFlateDecode directo; los flujos de contenido con otros filtros o encadenados siguen estando disponibles para los motores dedicados de preflight completopvviModDateMismatch 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;