function ValidatePdfR: TPdfRValidationResult;
ValidatePdfR recorre el documento abierto buscando los marcadores de
formato de archivo definidos por ISO 23504-1:2020
%PDF-raster-x.y cerca del final del archivo (§5)%PDF-1.4, %PDF-1.5, %PDF-1.6 o %PDF-1.7 (§6.2.2) para archivos no cifrados, o %PDF-2.0 (§6.2.3) para archivos cifrados/Type /ObjStm — §6.2.4)pvriProhibitedCatalogEntry)pvriProhibitedInfoEntry)/ID en el trailerThe result is a TPdfRValidationResult record:
prc1 (marcador PDF/R-1 encontrado), prcNone (sin marcador) o prcUnknown (análisis fallido o documento inactivo)TPdfRValidationIssues con cero o más valores: pvriMissingVersionMarker, pvriBadHeader, pvriObjStmPresent, pvriProhibitedCatalogEntry, pvriProhibitedInfoEntry, pvriInfoXmpMismatch, pvriMissingXmpMetadata, pvriMissingTrailerIdValidatePdfR es una inspección de solo lectura del formato de archivo. La
conformidad PDF/R-1 tiene requisitos estructurales estrictos que este
método no comprueba — estructura Contents por página, forma de MediaBox,
filtros permitidos, referencias indirectas de generación cero, diseño de
strip. Combínalo con un validador PDF/R de TWAIN Working Group para esas
comprobaciones a nivel de contenido
%PDF-raster- como subcadena en cualquier parte del archivo. ISO 23504-1 §5 especifica que el marcador se coloca entre el diccionario trailer y startxref, pero el validador acepta otras ubicaciones para seguir siendo tolerante con generadores ligeramente no estándarValidatePdfR sobre un documento inactivo devuelve un registro con Conformance = prcUnknown y un conjunto Issues vacío%PDF-2.0), así que el validador NO marca la clave /Encrypt del trailer como una no conformidad. Los PDF de origen cifrados bajo PDF 1.x seguirían fallando por la comprobación de la cabecera
uses System.TypInfo;
var
Outcome: TPdfRValidationResult;
Issue: TPdfRValidationIssue;
begin
Pdf1.FileName := 'C:\Incoming\scan.pdf';
Pdf1.Active := True;
Outcome := Pdf1.ValidatePdfR;
Memo1.Lines.Add('Level: ' + GetEnumName(TypeInfo(TPdfRConformance),
Ord(Outcome.Conformance)));
for Issue in Outcome.Issues do
Memo1.Lines.Add('- ' + GetEnumName(TypeInfo(TPdfRValidationIssue), Ord(Issue)));
end;