PDFium Delphi Component Docs

FPdfPdfvtMime Unità

Unità: FPdfPdfvtMime
Costruisce e valida stream di parti MIME PDF/VT-2s a file singolo che trasportano un documento PDF/VT inline, il suo payload di allegato riutilizzabile e il profilo ICC come unico contenitore multipart

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 il trasporto PDF/VT-2s definito nell'Allegato di ISO 16612-2, in cui un documento PDF/VT insieme al suo contenuto PDF riutilizzabile referenziato e al profilo ICC viene confezionato come un unico stream MIME multipart

A differenza del percorso TPdf.SaveAsPdfVT che scrive un file PDF/VT-1 autonomo, questa unit opera puramente su stream di byte e non carica mai pdfium.dll, quindi può girare in server headless e pipeline batch

BuildPdfVT2sStream assembla i chunk in ordine ed emette l'header StreamVersion, i confini delle parti e gli header Content-Type / Content-Disposition per ogni parte; ValidatePdfVT2sStream analizza nuovamente uno stream esistente e riporta deviazioni strutturali, di condizione di stampa e ICC come un insieme tipizzato di problemi

InspectPdfVT2sStream restituisce lo stesso risultato di compatibilità più le evidenze per ogni parte PDF/VT, inclusa la conformità PDF/VT, la base PDF/X, l'identità dell'OutputIntent, la provenienza del profilo, MD5 e SHA-256, i metadati ICC grezzi e i conteggi di pagine e record di destinatari DPart

Ogni parte PDF viene prima classificata con ValidatePdfVTCompliance; gli allegati riutilizzabili solo PDF/X restano destinazioni di riferimento idonee ma sono esclusi dal confronto della gerarchia PDF/VT e delle condizioni di stampa

Il confezionamento del profilo segue la base del file: PDF/VT-1 con PDF/X-4 e PDF/VT-2 con PDF/X-5g usano un DestOutputProfile incorporato, mentre PDF/VT-2 con PDF/X-4p o PDF/X-5pg usa DestOutputProfileRef risolto su una parte MIME ICC precedente

Chunk kinds

ValueMIME role
vtckInlinePdfUn documento PDF/VT trasportato come parte inline application/pdf; almeno uno è richiesto
vtckAttachmentPdfUna parte di contenuto PDF riutilizzabile referenziata dal documento inline, trasportata come attachment con un nome di file
vtckIccProfileUna parte profilo ICC (application/vnd.iccprofile) fornita come allegato con un nome di file

Supporting types

TypePurpose
TPdfVT2sChunksArray dinamico di chunk MIME ordinati forniti a BuildPdfVT2sStream
TAnsiStringsArray dinamico di nomi di file usato quando si validano riferimenti a file esterni nel PDF inline
TPdfVT2sValidationIssuesInsieme dei riscontri TPdfVT2sValidationIssue restituito dalla validazione
TPdfVTPrintingConditionSourceOrigine delle evidenze del profilo: vtpcsNone quando non risolto, vtpcsEmbeddedProfile per uno stream DestOutputProfile incorporato, vtpcsMimeProfile per un DestOutputProfileRef risolto su una parte MIME ICC
TPdfVTPrintingConditionEvidenceClassificazione PDF/VT e PDF/X per parte, OutputIntent, sorgente del profilo, identità, digest, header ICC e informazioni DPart
TPdfVT2sValidationReportRisultato dettagliato restituito da InspectPdfVT2sStream senza modificare il layout legacy del risultato

Validation issues

ValueReported when
vtmviNotMultipartLo stream non è un contenitore MIME multipart
vtmviMissingStreamVersionL'header StreamVersion PDF/VT richiesto è assente
vtmviStreamVersionValueIl valore StreamVersion non è il 1 atteso
vtmviStreamVersionAfterCtStreamVersion compare dopo la riga Content-Type invece che prima
vtmviMissingBoundaryIl parametro boundary del Content-Type manca
vtmviNoInlinePdfNessuna parte PDF/VT inline è presente
vtmviInlinePdfNotPdfVTLa parte inline non è dichiarata come PDF/VT
vtmviIccProfileBadDispositionUna parte profilo ICC non è un attachment
vtmviAttachmentMissingFilenameUna parte attachment è priva del nome di file richiesto
vtmviInlineHasFilenameLa parte PDF inline porta un nome di file, cosa non consentita
vtmviNodeNameListMismatchDue file PDF/VT nello stream espongono valori NodeNameList diversi
vtmviRecordLevelMismatchI livelli di record DPart sono incoerenti attraverso il contenitore
vtmviForwardReferenceUn allegato è referenziato prima di comparire nello stream
vtmviBoundaryInvalidCharLa stringa boundary contiene caratteri non ammessi da RFC 2046
vtmviDuplicateFilenameDue allegati MIME espongono lo stesso nome di file, confronto sensibile alle maiuscole
vtmviOutputIntentAmbiguousUna parte PDF ha zero o più OutputIntents autorevoli GTS_PDFX
vtmviOutputProfilePackagingMismatchL'OutputIntent ha entrambe le forme di profilo, nessuna delle due, oppure una forma incompatibile con la base PDF/X-4, PDF/X-4p, PDF/X-5g o PDF/X-5pg
vtmviOutputProfileReferenceInvalidUn DestOutputProfileRef omette metadati richiesti o una specifica di file URL, oppure usa un ColorantTable vietato
vtmviReferencedPartWrongTypeIl nome di file referenziato si risolve in una parte MIME che non è un profilo ICC
vtmviIccProfileInvalidL'header ICC, la dimensione dichiarata, la firma, la tabella dei tag o lo spazio colore di processo supportato non è valido
vtmviIccChecksumMismatchIl CheckSum decodificato di 16 byte differisce dall'MD5 del file ICC completo
vtmviIccVersionMismatchI quattro byte ICCVersion dichiarati differiscono dai byte da 8 a 11 dell'header ICC
vtmviIccColorSpaceMismatchProfileCS differisce dai byte da 16 a 19 dell'header ICC oppure non è GRAY, RGB o CMYK
vtmviIccProfileNameMismatchProfileName non corrisponde a nessun valore locale valido del profileDescriptionTag
vtmviPrintingConditionUnresolvedL'OutputIntent autorevole, l'identificatore o la dipendenza ICC esterna non possono essere risolti
vtmviPrintingConditionMismatchLe parti PDF/VT discordano su OutputConditionIdentifier, presenza o valore di RegistryName, oppure spazio colore di processo
vtmviIccDeviceClassMismatchUn profilo di destinazione incorporato o esterno non è un profilo di dispositivo di output 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