PDFium Delphi Component Docs

FPdfPdfvtMime Unité

Module: FPdfPdfvtMime
Construit et valide des flux de parties MIME PDF/VT-2s à fichier unique qui transportent un document PDF/VT en ligne, sa charge utile de pièces jointes réutilisable et le profil ICC dans un seul conteneur 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 implémente le transport PDF/VT-2s défini dans l’annexe d’ISO 16612-2, où un document PDF/VT plus son contenu PDF réutilisable référencé et son profil ICC sont empaquetés en un unique flux MIME multipart

Contrairement au chemin TPdf.SaveAsPdfVT qui écrit un fichier PDF/VT-1 autonome, cette unité opère purement sur des flux d’octets et ne charge jamais pdfium.dll, de sorte qu’elle peut s’exécuter dans des serveurs headless et des pipelines de traitement par lots

BuildPdfVT2sStream assemble les fragments dans l’ordre et émet l’en-tête StreamVersion, les frontières de parties et les en-têtes Content-Type / Content-Disposition par partie ; ValidatePdfVT2sStream analyse un flux existant en retour et signale les écarts structurels, de condition d’impression et ICC comme un ensemble de problèmes typé

InspectPdfVT2sStream renvoie le même résultat de compatibilité plus des preuves pour chaque partie PDF/VT, y compris la conformité PDF/VT, la base PDF/X, l’identité OutputIntent, la provenance du profil, MD5 et SHA-256, les métadonnées ICC brutes et les comptages de pages et d’enregistrements de destinataires DPart

Chaque partie PDF est d’abord classée avec ValidatePdfVTCompliance ; les pièces jointes réutilisables uniquement PDF/X restent des cibles de référence éligibles mais sont exclues de la hiérarchie PDF/VT et des comparaisons de conditions d’impression

L’empaquetage du profil suit la base du fichier : PDF/VT-1 avec PDF/X-4 et PDF/VT-2 avec PDF/X-5g utilisent un DestOutputProfile intégré, tandis que PDF/VT-2 avec PDF/X-4p ou PDF/X-5pg utilise un DestOutputProfileRef résolu vers une partie MIME ICC antérieure

Chunk kinds

ValueMIME role
vtckInlinePdfUn document PDF/VT transporté comme partie application/pdf en ligne ; au moins un est requis
vtckAttachmentPdfUne partie de contenu PDF réutilisable référencée par le document en ligne, transportée comme attachment avec un nom de fichier
vtckIccProfileUne partie de profil ICC (application/vnd.iccprofile) fournie comme pièce jointe avec un nom de fichier

Supporting types

TypePurpose
TPdfVT2sChunksTableau dynamique de fragments MIME ordonnés fournis à BuildPdfVT2sStream
TAnsiStringsTableau dynamique de noms de fichiers utilisé lors de la validation des références de fichiers externes dans le PDF en ligne
TPdfVT2sValidationIssuesEnsemble de constats TPdfVT2sValidationIssue renvoyé par la validation
TPdfVTPrintingConditionSourceOrigine des preuves de profil : vtpcsNone lorsqu’il n’est pas résolu, vtpcsEmbeddedProfile pour un flux DestOutputProfile intégré, vtpcsMimeProfile pour un DestOutputProfileRef résolu depuis une partie MIME ICC
TPdfVTPrintingConditionEvidenceClassification PDF/VT et PDF/X par partie, OutputIntent, source de profil, identité, empreinte, en-tête ICC et informations DPart
TPdfVT2sValidationReportRésultat détaillé renvoyé par InspectPdfVT2sStream sans modifier la disposition du résultat historique

Validation issues

ValueReported when
vtmviNotMultipartLe flux n’est pas un conteneur MIME multipart
vtmviMissingStreamVersionL’en-tête StreamVersion PDF/VT requis est absent
vtmviStreamVersionValueLa valeur StreamVersion n’est pas la valeur 1 attendue
vtmviStreamVersionAfterCtStreamVersion apparaît après la ligne Content-Type au lieu d’avant
vtmviMissingBoundaryLe paramètre boundary du Content-Type est manquant
vtmviNoInlinePdfAucune partie PDF/VT en ligne n’est présente
vtmviInlinePdfNotPdfVTLa partie en ligne n’est pas déclarée comme PDF/VT
vtmviIccProfileBadDispositionUne partie de profil ICC n’est pas une pièce jointe
vtmviAttachmentMissingFilenameUne partie jointe manque du nom de fichier requis
vtmviInlineHasFilenameLa partie PDF en ligne porte un nom de fichier, ce qui n’est pas permis
vtmviNodeNameListMismatchDeux fichiers PDF/VT du flux exposent des valeurs NodeNameList différentes
vtmviRecordLevelMismatchLes niveaux d’enregistrements DPart sont incohérents dans le conteneur
vtmviForwardReferenceUne pièce jointe est référencée avant d’apparaître dans le flux
vtmviBoundaryInvalidCharLa chaîne boundary contient des caractères non autorisés par la RFC 2046
vtmviDuplicateFilenameDeux pièces jointes MIME exposent le même nom de fichier sensible à la casse
vtmviOutputIntentAmbiguousUne partie PDF a zéro ou plusieurs OutputIntents GTS_PDFX faisant autorité
vtmviOutputProfilePackagingMismatchL’OutputIntent a les deux formes de profil, aucune forme, ou une forme incompatible avec la base PDF/X-4, PDF/X-4p, PDF/X-5g ou PDF/X-5pg
vtmviOutputProfileReferenceInvalidUn DestOutputProfileRef omet des métadonnées requises, une spécification de fichier URL, ou utilise un ColorantTable interdit
vtmviReferencedPartWrongTypeLe nom de fichier référencé se résout en une partie MIME qui n’est pas un profil ICC
vtmviIccProfileInvalidL’en-tête ICC, la taille déclarée, la signature, la table de tags ou l’espace colorimétrique primaire pris en charge est invalide
vtmviIccChecksumMismatchLe CheckSum décodé de 16 octets diffère du MD5 du fichier ICC complet
vtmviIccVersionMismatchLes quatre octets ICCVersion déclarés diffèrent des octets 8 à 11 de l’en-tête ICC
vtmviIccColorSpaceMismatchProfileCS diffère des octets 16 à 19 de l’en-tête ICC ou n’est pas GRAY, RGB ou CMYK
vtmviIccProfileNameMismatchProfileName ne correspond à aucune valeur de locale valide du profileDescriptionTag
vtmviPrintingConditionUnresolvedL’OutputIntent faisant autorité, l’identifiant ou la dépendance ICC externe ne peut pas être résolu
vtmviPrintingConditionMismatchLes parties PDF/VT divergent sur OutputConditionIdentifier, la présence ou la valeur de RegistryName, ou l’espace colorimétrique primaire
vtmviIccDeviceClassMismatchUn profil de destination intégré ou externe n’est pas un profil de périphérique de sortie 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