PDFium Component Docs

Unidad FPdfPdfvtMime

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

Syntax

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;

Description

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 canalizaciones por lotes

BuildPdfVT2sStream ensambla los fragmentos en orden y emite el encabezado StreamVersion, los límites de las partes y los encabezados Content-Type / Content-Disposition de cada parte; ValidatePdfVT2sStream vuelve a analizar un flujo existente e informa las desviaciones estructurales, de condición 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, incluidos la conformidad PDF/VT, la base PDF/X, la identidad del OutputIntent, la procedencia del perfil, MD5 y SHA-256, los metadatos ICC sin procesar y los conteos de páginas y de registros de destinatarios del DPart

Cada parte PDF se clasifica primero con ValidatePdfVTCompliance; los adjuntos reutilizables de solo PDF/X siguen siendo objetivos de referencia elegibles, pero quedan excluidos de las comparaciones de jerarquía PDF/VT y de condición 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 usa DestOutputProfileRef resuelto a una parte MIME ICC anterior

Chunk kinds

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

Supporting types

TipoPropósito
TPdfVT2sChunksArreglo dinámico de fragmentos MIME ordenados suministrados a BuildPdfVT2sStream
TAnsiStringsArreglo dinámico de nombres de archivo usado 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 se resuelve, 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, encabezado ICC y datos del DPart
TPdfVT2sValidationReportResultado detallado devuelto por InspectPdfVT2sStream sin cambiar la disposición del resultado heredado

Validation issues

ValorSe informa cuando
vtmviNotMultipartEl flujo no es un contenedor MIME multiparte
vtmviMissingStreamVersionFalta el encabezado StreamVersion requerido de PDF/VT
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 de adjunto 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 en el flujo exponen valores NodeNameList distintos
vtmviRecordLevelMismatchLos niveles de registro del DPart son inconsistentes en el contenedor
vtmviForwardReferenceSe hace referencia a 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, distinguiendo mayúsculas de minúsculas
vtmviOutputIntentAmbiguousUna parte PDF tiene cero o múltiples OutputIntents GTS_PDFX autoritativos
vtmviOutputProfilePackagingMismatchEl OutputIntent tiene ambas formas de perfil, ninguna forma, o una forma incompatible con la base PDF/X-4, PDF/X-4p, PDF/X-5g o PDF/X-5pg
vtmviOutputProfileReferenceInvalidUn DestOutputProfileRef omite los 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
vtmviIccProfileInvalidEl encabezado ICC, el tamaño declarado, la firma, la tabla de etiquetas o el espacio de color de proceso admitido no es válido
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 del encabezado ICC
vtmviIccColorSpaceMismatchProfileCS difiere de los bytes 16 a 19 del encabezado ICC o no es GRAY, RGB ni CMYK
vtmviIccProfileNameMismatchProfileName no coincide con ningún valor de configuración regional válido del profileDescriptionTag
vtmviPrintingConditionUnresolvedNo se puede resolver el OutputIntent autoritativo, el identificador o la dependencia ICC externa
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

Remarks

Example

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;

See Also

FPdfAsn1