PDFium Delphi Component Docs

FPdfPdfvtMime Unit

Unit: FPdfPdfvtMime
Erzeugt und validiert MIME-Teilstreams für PDF/VT-2s aus einer einzigen Datei, die ein Inline-PDF/VT-Dokument, seine wiederverwendbare Anhang-Nutzlast und das ICC-Profil als gemeinsamen Multipart-Container tragen

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;

Beschreibung

FPdfPdfvtMime implementiert den im ISO 16612-2 Annex definierten PDF/VT-2s-Transport, bei dem ein PDF/VT-Dokument samt seiner referenzierten wiederverwendbaren PDF-Inhalte und des ICC-Profils als einzelner MIME-Multipart-Stream verpackt wird

Anders als der Pfad TPdf.SaveAsPdfVT, der eine eigenständige PDF/VT-1-Datei schreibt, arbeitet diese Unit rein auf Byteströmen und lädt niemals pdfium.dll, sodass sie in Headless-Servern und Batch-Pipelines laufen kann

BuildPdfVT2sStream setzt die Chunks in Reihenfolge zusammen und gibt den StreamVersion-Header, Teilgrenzen sowie Content-Type-/Content-Disposition-Header je Teil aus; ValidatePdfVT2sStream parst einen bestehenden Stream zurück und meldet strukturelle, Druckbedingungs- und ICC-Abweichungen als typisierte Problem-Menge

InspectPdfVT2sStream liefert dasselbe Kompatibilitätsergebnis plus Belege für jeden PDF/VT-Teil, einschließlich PDF/VT-Konformität, PDF/X-Basis, OutputIntent-Identität, Profil-Herkunft, MD5 und SHA-256, rohe ICC-Metadaten sowie DPart-Seiten- und Empfängerdatensatz-Zählungen

Jeder PDF-Teil wird zunächst mit ValidatePdfVTCompliance klassifiziert; nur-PDF/X-wiederverwendbare Anhänge bleiben geeignete Referenzziele, werden aber von der PDF/VT-Hierarchie und den Druckbedingungs-Vergleichen ausgeschlossen

Die Profil-Verpackung folgt der Dateibasis: PDF/VT-1 mit PDF/X-4 und PDF/VT-2 mit PDF/X-5g verwenden ein eingebettetes DestOutputProfile, während PDF/VT-2 mit PDF/X-4p oder PDF/X-5pg ein DestOutputProfileRef verwendet, das zu einem früheren ICC-MIME-Teil aufgelöst wird

Chunk-Arten

WertMIME-Rolle
vtckInlinePdfEin PDF/VT-Dokument als Inline-application/pdf-Teil; mindestens einer ist erforderlich
vtckAttachmentPdfEin vom Inline-Dokument referenzierter wiederverwendbarer PDF-Inhaltsteil, übergeben als attachment mit Dateinamen
vtckIccProfileEin ICC-Profil-Teil (application/vnd.iccprofile), als Anhang mit Dateinamen übergeben

Unterstützungstypen

TypZweck
TPdfVT2sChunksDynamisches Array geordneter MIME-Chunks, das an BuildPdfVT2sStream übergeben wird
TAnsiStringsDynamisches Dateinamen-Array, verwendet beim Validieren externer Dateireferenzen im Inline-PDF
TPdfVT2sValidationIssuesMenge der TPdfVT2sValidationIssue-Befunde, die die Validierung zurückgibt
TPdfVTPrintingConditionSourceHerkunft der Profilbelege: vtpcsNone bei unaufgelöstem Zustand, vtpcsEmbeddedProfile für einen eingebetteten DestOutputProfile-Stream, vtpcsMimeProfile für ein aus einem ICC-MIME-Teil aufgelöstes DestOutputProfileRef
TPdfVTPrintingConditionEvidencePDF/VT- und PDF/X-Klassifizierung je Teil, OutputIntent, Profilquelle, Identität, Digest, ICC-Header und DPart-Fakten
TPdfVT2sValidationReportDetailliertes Ergebnis von InspectPdfVT2sStream, ohne das klassische Ergebnislayout zu verändern

Validierungs-Issues

WertWann gemeldet
vtmviNotMultipartDer Stream ist kein Multipart-MIME-Container
vtmviMissingStreamVersionDer erforderliche PDF/VT-StreamVersion-Header fehlt
vtmviStreamVersionValueDer StreamVersion-Wert ist nicht der erwartete 1
vtmviStreamVersionAfterCtStreamVersion erscheint nach der Content-Type-Zeile statt vor ihr
vtmviMissingBoundaryDer Content-Type-boundary-Parameter fehlt
vtmviNoInlinePdfKein Inline-PDF/VT-Teil ist vorhanden
vtmviInlinePdfNotPdfVTDer Inline-Teil ist nicht als PDF/VT deklariert
vtmviIccProfileBadDispositionEin ICC-Profil-Teil ist kein Anhang
vtmviAttachmentMissingFilenameEin Anhangsteil hat den erforderlichen Dateinamen nicht
vtmviInlineHasFilenameDer Inline-PDF-Teil trägt einen Dateinamen, was nicht erlaubt ist
vtmviNodeNameListMismatchZwei PDF/VT-Dateien im Stream geben unterschiedliche NodeNameList-Werte an
vtmviRecordLevelMismatchDPart-Datensatzebenen sind innerhalb des Containers widersprüchlich
vtmviForwardReferenceEin Anhang wird referenziert, bevor er im Stream erscheint
vtmviBoundaryInvalidCharDer Boundary-String enthält Zeichen, die RFC 2046 nicht erlaubt
vtmviDuplicateFilenameZwei MIME-Anhänge geben denselben groß-/kleinschreibungssensitiven Dateinamen an
vtmviOutputIntentAmbiguousEin PDF-Teil hat keinen oder mehrere maßgebliche GTS_PDFX-OutputIntents
vtmviOutputProfilePackagingMismatchDer OutputIntent hat beide Profilformen, keine Form oder eine zur PDF/X-4-, PDF/X-4p-, PDF/X-5g- oder PDF/X-5pg-Basis inkompatible Form
vtmviOutputProfileReferenceInvalidEin DestOutputProfileRef lässt erforderliche Metadaten oder eine URL-Dateispezifikation weg oder verwendet eine unzulässige ColorantTable
vtmviReferencedPartWrongTypeDer referenzierte Dateiname löst zu einem MIME-Teil auf, der kein ICC-Profil ist
vtmviIccProfileInvalidDer ICC-Header, die deklarierte Größe, die Signatur, die Tag-Tabelle oder der unterstützte Prozessfarbraum ist ungültig
vtmviIccChecksumMismatchDie dekodierte 16-Byte-CheckSum weicht vom MD5 der vollständigen ICC-Datei ab
vtmviIccVersionMismatchDie deklarierten vier ICCVersion-Bytes weichen von ICC-Header-Bytes 8 bis 11 ab
vtmviIccColorSpaceMismatchProfileCS weicht von ICC-Header-Bytes 16 bis 19 ab oder ist nicht GRAY, RGB oder CMYK
vtmviIccProfileNameMismatchProfileName passt zu keinem gültigen profileDescriptionTag-Locale-Wert
vtmviPrintingConditionUnresolvedDer maßgebliche OutputIntent, Bezeichner oder die externe ICC-Abhängigkeit kann nicht aufgelöst werden
vtmviPrintingConditionMismatchPDF/VT-Teile weichen bei OutputConditionIdentifier, RegistryName-Präsenz oder -Wert oder beim Prozessfarbraum ab
vtmviIccDeviceClassMismatchEin eingebettetes oder externes Zielfeldprofil ist kein Ausgabegeräte-prtr-Profil

Hinweise

Beispiel

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;

Siehe auch

FPdfAsn1