PDFium Delphi Component Docs

Unidade FPdfPdfvtMime

Unidade: FPdfPdfvtMime
Constrói e valida streams de partes MIME PDF/VT-2s em arquivo único que carregam um documento PDF/VT inline, seu payload de anexo reutilizável e o perfil ICC como um contêiner multipart único

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 o transporte PDF/VT-2s definido no Anexo da ISO 16612-2, em que um documento PDF/VT mais seu conteúdo PDF reutilizável referenciado e o perfil ICC são empacotados como um único stream MIME multipart

Diferente do caminho TPdf.SaveAsPdfVT que grava um arquivo PDF/VT-1 autônomo, esta unidade opera puramente sobre streams de bytes e nunca carrega o pdfium.dll, de modo que pode executar em servidores headless e pipelines de lote

BuildPdfVT2sStream monta os chunks em ordem e emite o header StreamVersion, os limites de partes e os headers Content-Type / Content-Disposition de cada parte; ValidatePdfVT2sStream analisa um stream existente de volta e informa desvios estruturais, de condição de impressão e de ICC como um conjunto de questões tipado

InspectPdfVT2sStream retorna o mesmo resultado de compatibilidade mais evidências para cada parte PDF/VT, incluindo conformidade PDF/VT, base PDF/X, identidade do OutputIntent, proveniência do perfil, MD5 e SHA-256, metadados ICC brutos e contagens de páginas e de registros de destinatários do DPart

Cada parte PDF é primeiro classificada com ValidatePdfVTCompliance; anexos reutilizáveis apenas PDF/X permanecem elegíveis como alvos de referência, mas são excluídos das comparações de hierarquia PDF/VT e de condição de impressão

O empacotamento do perfil segue a base do arquivo: PDF/VT-1 com PDF/X-4 e PDF/VT-2 com PDF/X-5g usam um DestOutputProfile embutido, enquanto PDF/VT-2 com PDF/X-4p ou PDF/X-5pg usam DestOutputProfileRef resolvido para uma parte MIME ICC anterior

Chunk kinds

ValueMIME role
vtckInlinePdfUm documento PDF/VT carregado como uma parte inline application/pdf; pelo menos um é exigido
vtckAttachmentPdfUma parte de conteúdo PDF reutilizável referenciada pelo documento inline, carregada como um attachment com um nome de arquivo
vtckIccProfileUma parte de perfil ICC (application/vnd.iccprofile) fornecida como um attachment com um nome de arquivo

Supporting types

TypePurpose
TPdfVT2sChunksArray dinâmico de chunks MIME ordenados fornecidos a BuildPdfVT2sStream
TAnsiStringsArray dinâmico de nomes de arquivo usado ao validar referências a arquivos externos no PDF inline
TPdfVT2sValidationIssuesConjunto de constatações TPdfVT2sValidationIssue retornado pela validação
TPdfVTPrintingConditionSourceOrigem das evidências do perfil: vtpcsNone quando não resolvido, vtpcsEmbeddedProfile para um stream DestOutputProfile embutido, vtpcsMimeProfile para um DestOutputProfileRef resolvido a partir de uma parte MIME ICC
TPdfVTPrintingConditionEvidenceClassificação PDF/VT e PDF/X por parte, OutputIntent, origem do perfil, identidade, digest, header ICC e dados do DPart
TPdfVT2sValidationReportResultado detalhado retornado por InspectPdfVT2sStream sem alterar o layout do resultado legado

Validation issues

ValueReported when
vtmviNotMultipartO stream não é um contêiner MIME multipart
vtmviMissingStreamVersionO header StreamVersion de PDF/VT exigido está ausente
vtmviStreamVersionValueO valor de StreamVersion não é o 1 esperado
vtmviStreamVersionAfterCtStreamVersion aparece depois da linha Content-Type em vez de antes dela
vtmviMissingBoundaryO parâmetro boundary do Content-Type está ausente
vtmviNoInlinePdfNenhuma parte PDF/VT inline está presente
vtmviInlinePdfNotPdfVTA parte inline não é declarada como PDF/VT
vtmviIccProfileBadDispositionUma parte de perfil ICC não é um attachment
vtmviAttachmentMissingFilenameUma parte attachment carece do nome de arquivo exigido
vtmviInlineHasFilenameA parte PDF inline carrega um nome de arquivo, o que não é permitido
vtmviNodeNameListMismatchDois arquivos PDF/VT no stream expõem valores NodeNameList diferentes
vtmviRecordLevelMismatchOs níveis de registro do DPart são inconsistentes ao longo do contêiner
vtmviForwardReferenceUm attachment é referenciado antes de aparecer no stream
vtmviBoundaryInvalidCharA string boundary contém caracteres não permitidos pela RFC 2046
vtmviDuplicateFilenameDois attachments MIME expõem o mesmo nome de arquivo, com distinção de maiúsculas e minúsculas
vtmviOutputIntentAmbiguousUma parte PDF tem zero ou múltiplos OutputIntents GTS_PDFX autoritativos
vtmviOutputProfilePackagingMismatchO OutputIntent tem ambas as formas de perfil, nenhuma forma, ou uma forma incompatível com a base PDF/X-4, PDF/X-4p, PDF/X-5g ou PDF/X-5pg
vtmviOutputProfileReferenceInvalidUm DestOutputProfileRef omite metadados exigidos, uma especificação de arquivo de URL, ou usa um ColorantTable proibido
vtmviReferencedPartWrongTypeO nome de arquivo referenciado resolve para uma parte MIME que não é um perfil ICC
vtmviIccProfileInvalidO header ICC, o tamanho declarado, a assinatura, a tabela de tags ou o espaço de cor de processo suportado é inválido
vtmviIccChecksumMismatchO CheckSum decodificado de 16 bytes difere do MD5 do arquivo ICC completo
vtmviIccVersionMismatchOs quatro bytes ICCVersion declarados diferem dos bytes 8 a 11 do header ICC
vtmviIccColorSpaceMismatchProfileCS difere dos bytes 16 a 19 do header ICC ou não é GRAY, RGB ou CMYK
vtmviIccProfileNameMismatchProfileName não corresponde a nenhum valor de locale válido do profileDescriptionTag
vtmviPrintingConditionUnresolvedO OutputIntent autoritativo, o identificador ou a dependência ICC externa não podem ser resolvidos
vtmviPrintingConditionMismatchAs partes PDF/VT divergem quanto ao OutputConditionIdentifier, à presença ou ao valor do RegistryName, ou ao espaço de cor de processo
vtmviIccDeviceClassMismatchUm perfil de destino embutido ou externo não é um perfil de dispositivo de saída 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