PDFium Delphi Component Docs

Unidad FPdfPdfvtMime

Unidad: FPdfPdfvtMime
Construye y valida flujos de partes MIME de PDF/VT-2s de archivo único que llevan un documento PDF/VT en línea, su carga de adjuntos reutilizable y el perfil ICC como un único contenedor multiparte

Sintaxis

TVt2sChunkKind = (vtckInlinePdf, vtckAttachmentPdf, vtckIccProfile);

TPdfVT2sChunk = record
  Kind: TVt2sChunkKind;
  Bytes: TBytes;
  FileName: AnsiString;
end;

TPdfVT2sChunks = array of TPdfVT2sChunk;

TAnsiStrings = array of AnsiString;

TPdfVT2sValidationResult = record
  Issues: TPdfVT2sValidationIssues;
  function IsCompliant: Boolean;
end;

TPdfVTPrintingConditionSource = (vtpcsNone, vtpcsEmbeddedProfile, vtpcsMimeProfile);

TPdfVTPrintingConditionEvidence = record
  PartIndex: Integer;
  Conformance: TPdfVTConformance;
  PdfXVersion: AnsiString;
  OutputIntentObjectNumber: Integer;
  OutputConditionIdentifier: AnsiString;
  RegistryName: AnsiString;
  Source: TPdfVTPrintingConditionSource;
  ProfileFileName: AnsiString;
  ProfileName: AnsiString;
  ProfileColorSpace: AnsiString;
  ProfileByteSize: Int64;
  ProfileMd5: string;
  ProfileSha256: string;
  ProfileVersion: string;
  ProfileDeviceClass: string;
  ProfilePcs: string;
  ProfileComponentCount: Integer;
  Resolved: Boolean;
  ProfileValid: Boolean;
  DPart: TPdfVTDPartEvidence;
end;

TPdfVT2sValidationReport = record
  Validation: TPdfVT2sValidationResult;
  PrintingConditions: TPdfVTPrintingConditionEvidenceArray;
end;

procedure BuildPdfVT2sStream(const Chunks: TPdfVT2sChunks; Dest: TStream);
function ValidatePdfVT2sStream(Source: TStream): TPdfVT2sValidationResult;
function InspectPdfVT2sStream(Source: TStream): TPdfVT2sValidationReport;

Descripción

FPdfPdfvtMime implementa el transporte PDF/VT-2s definido en el Anexo de ISO 16612-2, donde un documento PDF/VT junto con su contenido PDF reutilizable referenciado y su perfil ICC se empaquetan como un único flujo MIME multiparte

A diferencia de la ruta TPdf.SaveAsPdfVT que escribe un archivo PDF/VT-1 independiente, esta unidad opera puramente sobre flujos de bytes y nunca carga pdfium.dll, de modo que puede ejecutarse en servidores sin interfaz y en pipelines por lotes

BuildPdfVT2sStream ensambla los fragmentos en orden y emite la cabecera StreamVersion, los límites de las partes y las cabeceras Content-Type / Content-Disposition de cada parte; ValidatePdfVT2sStream vuelve a analizar un flujo existente e informa de las desviaciones estructurales, de condiciones de impresión y de ICC como un conjunto de problemas tipado

InspectPdfVT2sStream devuelve el mismo resultado de compatibilidad más evidencia de cada parte PDF/VT, incluida la conformidad PDF/VT, la base PDF/X, la identidad del OutputIntent, la procedencia del perfil, el MD5 y el SHA-256, los metadatos ICC en bruto y los recuentos de páginas y registros de destinatarios de DPart

Cada parte PDF se clasifica primero con ValidatePdfVTCompliance; los adjuntos reutilizables exclusivamente PDF/X siguen siendo objetivos de referencia elegibles, pero quedan excluidos de la jerarquía PDF/VT y de las comparaciones de condiciones de impresión

El empaquetado del perfil sigue la base del archivo: PDF/VT-1 con PDF/X-4 y PDF/VT-2 con PDF/X-5g usan un DestOutputProfile incrustado, mientras que PDF/VT-2 con PDF/X-4p o PDF/X-5pg usan DestOutputProfileRef resuelto a una parte MIME ICC anterior

Clases de fragmentos

ValorRol MIME
vtckInlinePdfUn documento PDF/VT llevado como una parte application/pdf en línea; se requiere al menos uno
vtckAttachmentPdfUna parte de contenido PDF reutilizable referenciada por el documento en línea, llevada como attachment con un nombre de archivo
vtckIccProfileUna parte de perfil ICC (application/vnd.iccprofile) suministrada como adjunto con un nombre de archivo

Tipos de soporte

TipoPropósito
TPdfVT2sChunksMatriz dinámica de fragmentos MIME ordenados suministrados a BuildPdfVT2sStream
TAnsiStringsMatriz dinámica de nombres de archivo usada al validar referencias a archivos externos en el PDF en línea
TPdfVT2sValidationIssuesConjunto de hallazgos TPdfVT2sValidationIssue devueltos por la validación
TPdfVTPrintingConditionSourceOrigen de la evidencia del perfil: vtpcsNone cuando no está resuelto, vtpcsEmbeddedProfile para un flujo DestOutputProfile incrustado, vtpcsMimeProfile para un DestOutputProfileRef resuelto desde una parte MIME ICC
TPdfVTPrintingConditionEvidenceClasificación PDF/VT y PDF/X por parte, OutputIntent, origen del perfil, identidad, resumen, cabecera ICC y datos de DPart
TPdfVT2sValidationReportResultado detallado devuelto por InspectPdfVT2sStream sin cambiar la disposición del resultado heredado

Problemas de validación

ValorSe informa cuando
vtmviNotMultipartEl flujo no es un contenedor MIME multiparte
vtmviMissingStreamVersionFalta la cabecera StreamVersion de PDF/VT requerida
vtmviStreamVersionValueEl valor de StreamVersion no es el 1 esperado
vtmviStreamVersionAfterCtStreamVersion aparece después de la línea Content-Type en lugar de antes
vtmviMissingBoundaryFalta el parámetro boundary del Content-Type
vtmviNoInlinePdfNo hay ninguna parte PDF/VT en línea presente
vtmviInlinePdfNotPdfVTLa parte en línea no está declarada como PDF/VT
vtmviIccProfileBadDispositionUna parte de perfil ICC no es un adjunto
vtmviAttachmentMissingFilenameUna parte adjunta carece del nombre de archivo requerido
vtmviInlineHasFilenameLa parte PDF en línea lleva un nombre de archivo, lo cual no está permitido
vtmviNodeNameListMismatchDos archivos PDF/VT del flujo exponen valores NodeNameList distintos
vtmviRecordLevelMismatchLos niveles de registro de DPart son inconsistentes en todo el contenedor
vtmviForwardReferenceSe referencia un adjunto antes de que aparezca en el flujo
vtmviBoundaryInvalidCharLa cadena boundary contiene caracteres no permitidos por RFC 2046
vtmviDuplicateFilenameDos adjuntos MIME exponen el mismo nombre de archivo, que distingue mayúsculas de minúsculas
vtmviOutputIntentAmbiguousUna parte PDF tiene cero o varios OutputIntents GTS_PDFX autoritativos
vtmviOutputProfilePackagingMismatchEl OutputIntent tiene ambas formas de perfil, ninguna de ellas, o una forma incompatible con la base PDF/X-4, PDF/X-4p, PDF/X-5g o PDF/X-5pg
vtmviOutputProfileReferenceInvalidUn DestOutputProfileRef omite metadatos requeridos, una especificación de archivo URL, o usa un ColorantTable prohibido
vtmviReferencedPartWrongTypeEl nombre de archivo referenciado resuelve a una parte MIME que no es un perfil ICC
vtmviIccProfileInvalidLa cabecera ICC, el tamaño declarado, la firma, la tabla de etiquetas o el espacio de color de proceso admitido no son válidos
vtmviIccChecksumMismatchEl CheckSum decodificado de 16 bytes difiere del MD5 del archivo ICC completo
vtmviIccVersionMismatchLos cuatro bytes ICCVersion declarados difieren de los bytes 8 a 11 de la cabecera ICC
vtmviIccColorSpaceMismatchProfileCS difiere de los bytes 16 a 19 de la cabecera ICC o no es GRAY, RGB ni CMYK
vtmviIccProfileNameMismatchProfileName no coincide con ningún valor de configuración regional válido del profileDescriptionTag
vtmviPrintingConditionUnresolvedEl OutputIntent autoritativo, el identificador o la dependencia ICC externa no pueden resolverse
vtmviPrintingConditionMismatchLas partes PDF/VT discrepan en OutputConditionIdentifier, en la presencia o el valor de RegistryName, o en el espacio de color de proceso
vtmviIccDeviceClassMismatchUn perfil de destino incrustado o externo no es un perfil de dispositivo de salida prtr

Observaciones

Ejemplo

var Chunks: TPdfVT2sChunks;
begin
  SetLength(Chunks, 2);
  Chunks[0].Kind := vtckIccProfile;
  Chunks[0].FileName := 'profile.icc';
  Chunks[0].Bytes := IccBytes;
  Chunks[1].Kind := vtckInlinePdf;
  Chunks[1].Bytes := InlinePdfBytes;
  BuildPdfVT2sStream(Chunks, MimeStream);
end;

Véase también

FPdfAsn1