PDFium Delphi Component Docs

FPdfPdfvtMime ユニット

ユニット: FPdfPdfvtMime
インラインの PDF/VT ドキュメント、再利用可能な添付ペイロード、ICC プロファイルを 1 つの multipart コンテナとして運ぶ単一ファイル PDF/VT-2s MIME パートストリームを構築および検証します

構文

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;

説明

FPdfPdfvtMime は ISO 16612-2 附属書で定義される PDF/VT-2s 転送形式を実装します。PDF/VT ドキュメントと、そこから参照される再利用可能な PDF コンテンツおよび ICC プロファイルを、単一の MIME multipart ストリームとしてパッケージ化します

スタンドアロンの PDF/VT-1 ファイルを書き出す TPdf.SaveAsPdfVT の経路とは異なり、このユニットは純粋にバイトストリーム上で動作し pdfium.dll を決して読み込まないため、ヘッドレスサーバーやバッチパイプラインで実行できます

BuildPdfVT2sStream はチャンクを順に組み立て、StreamVersion ヘッダー、パート境界、パートごとの Content-Type / Content-Disposition ヘッダーを生成します。ValidatePdfVT2sStream は既存のストリームを逆解析し、構造、印刷条件、ICC の逸脱を型付きの問題セットとして報告します

InspectPdfVT2sStream は同じ互換結果に加えて、PDF/VT 適合、PDF/X ベース、OutputIntent の識別情報、プロファイルの由来、MD5 と SHA-256、生の ICC メタデータ、DPart のページと受信者レコード数といった、各 PDF/VT パートのエビデンスを返します

各 PDF パートは最初に ValidatePdfVTCompliance で分類されます。PDF/X のみの再利用可能な添付は引き続き参照先として有効ですが、PDF/VT の階層と印刷条件の比較からは除外されます

プロファイルのパッケージ化はファイルベースに従います。PDF/X-4 をベースとする PDF/VT-1 と PDF/X-5g をベースとする PDF/VT-2 は埋め込みの DestOutputProfile を使用し、PDF/X-4p または PDF/X-5pg をベースとする PDF/VT-2 は、前の方にある ICC MIME パートへ解決される DestOutputProfileRef を使用します

チャンク種別

値MIME 役割
vtckInlinePdfインラインの application/pdf パートとして運ばれる PDF/VT ドキュメントです。少なくとも 1 つが必要です
vtckAttachmentPdfインラインドキュメントから参照される再利用可能な PDF コンテンツパートです。ファイル名付きの attachment として運ばれます
vtckIccProfileファイル名付きの添付として供給される ICC プロファイルパート (application/vnd.iccprofile) です

補助型

型目的
TPdfVT2sChunksBuildPdfVT2sStream に供給される、順序付き MIME チャンクの動的配列です
TAnsiStringsインライン PDF 内の外部ファイル参照を検証するときに使われる、動的なファイル名配列です
TPdfVT2sValidationIssues検証が返す TPdfVT2sValidationIssue の検出結果セットです
TPdfVTPrintingConditionSourceプロファイルエビデンスの由来です。未解決のときは vtpcsNone、埋め込み DestOutputProfile ストリームは vtpcsEmbeddedProfile、ICC MIME パートから解決された DestOutputProfileRef は vtpcsMimeProfile です
TPdfVTPrintingConditionEvidenceパートごとの PDF/VT と PDF/X の分類、OutputIntent、プロファイルの由来、識別情報、ダイジェスト、ICC ヘッダー、DPart の情報です
TPdfVT2sValidationReport従来の結果レイアウトを変えずに InspectPdfVT2sStream が返す詳細結果です

検証問題

値報告される状況
vtmviNotMultipartストリームが multipart MIME コンテナではありません
vtmviMissingStreamVersion必須の PDF/VT StreamVersion ヘッダーが存在しません
vtmviStreamVersionValueStreamVersion 値が期待される 1 ではありません
vtmviStreamVersionAfterCtStreamVersion が Content-Type 行の前ではなく後に現れています
vtmviMissingBoundaryContent-Type の boundary パラメータが欠落しています
vtmviNoInlinePdfインラインの PDF/VT パートが存在しません
vtmviInlinePdfNotPdfVTインラインパートが PDF/VT として宣言されていません
vtmviIccProfileBadDispositionICC プロファイルパートが attachment ではありません
vtmviAttachmentMissingFilename添付パートに必須のファイル名がありません
vtmviInlineHasFilenameインライン PDF パートが、許可されないファイル名を運んでいます
vtmviNodeNameListMismatchストリーム内の 2 つの PDF/VT ファイルが異なる NodeNameList 値を公開しています
vtmviRecordLevelMismatchDPart のレコードレベルがコンテナ全体で一貫していません
vtmviForwardReference添付が、ストリーム内に出現する前に参照されています
vtmviBoundaryInvalidCharboundary 文字列に RFC 2046 で許可されない文字が含まれています
vtmviDuplicateFilename2 つの MIME 添付が、大文字小文字を区別して同じファイル名を公開しています
vtmviOutputIntentAmbiguousPDF パートに、権威ある GTS_PDFX OutputIntent が 0 個または複数あります
vtmviOutputProfilePackagingMismatchOutputIntent に両方のプロファイル形式、またはどちらの形式もなく、あるいは PDF/X-4、PDF/X-4p、PDF/X-5g、PDF/X-5pg のベースと非互換の形式があります
vtmviOutputProfileReferenceInvalidDestOutputProfileRef に必須メタデータや URL ファイル指定がなく、または禁止された ColorantTable を使用しています
vtmviReferencedPartWrongType参照されたファイル名が解決した MIME パートが ICC プロファイルではありません
vtmviIccProfileInvalidICC ヘッダー、宣言サイズ、シグネチャ、タグテーブル、サポートされるプロセス色空間のいずれかが無効です
vtmviIccChecksumMismatchデコードされた 16 バイトの CheckSum が ICC ファイル全体の MD5 と一致しません
vtmviIccVersionMismatch宣言された 4 バイトの ICCVersion が ICC ヘッダーの 8 から 11 バイト目と一致しません
vtmviIccColorSpaceMismatchProfileCS が ICC ヘッダーの 16 から 19 バイト目と一致しないか、GRAY、RGB、CMYK のいずれでもありません
vtmviIccProfileNameMismatchProfileName が有効な profileDescriptionTag のロケール値のどれにも一致しません
vtmviPrintingConditionUnresolved権威ある OutputIntent、識別子、外部 ICC 依存を解決できません
vtmviPrintingConditionMismatchPDF/VT パート間で OutputConditionIdentifier、RegistryName の有無や値、プロセス色空間が一致しません
vtmviIccDeviceClassMismatch埋め込みまたは外部の出力プロファイルが、出力デバイスの prtr プロファイルではありません

備考

例

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;

関連項目

FPdfAsn1