PDFium Delphi Component Docs

Đơn vị FPdfPdfvtMime

Unit: FPdfPdfvtMime
Dựng và kiểm tra các stream MIME part PDF/VT-2s đơn tệp mang một tài liệu PDF/VT inline, payload đính kèm tái sử dụng được của nó, và hồ sơ ICC như một container multipart duy nhất

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 hiện thực cơ chế vận chuyển PDF/VT-2s định nghĩa trong Phụ lục của ISO 16612-2, nơi một tài liệu PDF/VT cùng nội dung PDF tái sử dụng được mà nó tham chiếu và hồ sơ ICC được đóng gói thành một stream MIME multipart duy nhất

Khác với đường TPdf.SaveAsPdfVT ghi một tệp PDF/VT-1 độc lập, unit này chỉ làm việc thuần túy trên byte stream và không bao giờ nạp pdfium.dll, nhờ vậy chạy được trên các máy chủ headless và các pipeline xử lý hàng loạt

BuildPdfVT2sStream lắp các chunk theo thứ tự và phát ra header StreamVersion, các biên part, và các header Content-Type / Content-Disposition cho từng part; ValidatePdfVT2sStream parse ngược một stream hiện có và báo cáo các sai lệch cấu trúc, printing-condition và ICC dưới dạng một tập vấn đề có kiểu

InspectPdfVT2sStream trả về cùng kết quả tương thích cộng bằng chứng cho từng part PDF/VT, gồm mức tuân thủ PDF/VT, nền PDF/X, định danh OutputIntent, nguồn gốc hồ sơ, MD5 và SHA-256, siêu dữ liệu ICC thô, và số lượng trang cùng bản ghi người nhận của DPart

Mỗi part PDF được phân loại trước bằng ValidatePdfVTCompliance; các đính kèm tái sử dụng được chỉ thuộc PDF/X vẫn đủ điều kiện làm mục tiêu tham chiếu nhưng bị loại khỏi hệ phân cấp PDF/VT và các phép so sánh printing-condition

Cách đóng gói hồ sơ đi theo nền tệp: PDF/VT-1 với PDF/X-4 và PDF/VT-2 với PDF/X-5g dùng một DestOutputProfile nhúng, trong khi PDF/VT-2 với PDF/X-4p hay PDF/X-5pg dùng DestOutputProfileRef phân giải tới một part ICC MIME đứng trước

Chunk kinds

ValueMIME role
vtckInlinePdfMột tài liệu PDF/VT được mang dưới dạng part application/pdf inline; cần ít nhất một
vtckAttachmentPdfMột part nội dung PDF tái sử dụng được mà tài liệu inline tham chiếu, được mang dưới dạng attachment kèm tên tệp
vtckIccProfileMột part hồ sơ ICC (application/vnd.iccprofile) được cung cấp dưới dạng đính kèm kèm tên tệp

Supporting types

TypePurpose
TPdfVT2sChunksMảng động các MIME chunk có thứ tự được cung cấp cho BuildPdfVT2sStream
TAnsiStringsMảng tên tệp động dùng khi kiểm tra các tham chiếu tệp ngoài trong PDF inline
TPdfVT2sValidationIssuesTập các phát hiện TPdfVT2sValidationIssue được kiểm tra trả về
TPdfVTPrintingConditionSourceNguồn gốc của bằng chứng hồ sơ: vtpcsNone khi chưa phân giải được, vtpcsEmbeddedProfile cho một stream DestOutputProfile nhúng, vtpcsMimeProfile cho một DestOutputProfileRef phân giải từ một part ICC MIME
TPdfVTPrintingConditionEvidencePhân loại PDF/VT và PDF/X cho từng part, OutputIntent, nguồn hồ sơ, định danh, digest, header ICC và các sự thật DPart
TPdfVT2sValidationReportKết quả chi tiết do InspectPdfVT2sStream trả về mà không đổi bố cục kết quả cũ

Validation issues

ValueReported when
vtmviNotMultipartStream không phải một container MIME multipart
vtmviMissingStreamVersionThiếu header StreamVersion PDF/VT bắt buộc
vtmviStreamVersionValueGiá trị StreamVersion không phải 1 như mong đợi
vtmviStreamVersionAfterCtStreamVersion xuất hiện sau dòng Content-Type thay vì trước
vtmviMissingBoundaryThiếu tham số boundary trong Content-Type
vtmviNoInlinePdfKhông có part PDF/VT inline nào
vtmviInlinePdfNotPdfVTPart inline không được khai báo là PDF/VT
vtmviIccProfileBadDispositionMột part hồ sơ ICC không phải attachment
vtmviAttachmentMissingFilenameMột part đính kèm thiếu tên tệp bắt buộc
vtmviInlineHasFilenamePart PDF inline mang tên tệp, điều không được phép
vtmviNodeNameListMismatchHai tệp PDF/VT trong stream phơi bày các giá trị NodeNameList khác nhau
vtmviRecordLevelMismatchCác mức bản ghi DPart không nhất quán trong container
vtmviForwardReferenceMột đính kèm được tham chiếu trước khi nó xuất hiện trong stream
vtmviBoundaryInvalidCharChuỗi boundary chứa các ký tự RFC 2046 không cho phép
vtmviDuplicateFilenameHai đính kèm MIME phơi bày cùng một tên tệp phân biệt chữ hoa chữ thường
vtmviOutputIntentAmbiguousMột part PDF có không hay nhiều OutputIntent GTS_PDFX có thẩm quyền
vtmviOutputProfilePackagingMismatchOutputIntent có cả hai dạng hồ sơ, không dạng nào, hoặc một dạng không tương thích với nền PDF/X-4, PDF/X-4p, PDF/X-5g hay PDF/X-5pg
vtmviOutputProfileReferenceInvalidMột DestOutputProfileRef thiếu siêu dữ liệu bắt buộc, một đặc tả tệp URL, hoặc dùng một ColorantTable bị cấm
vtmviReferencedPartWrongTypeTên tệp được tham chiếu phân giải tới một part MIME không phải hồ sơ ICC
vtmviIccProfileInvalidHeader ICC, kích thước đã khai báo, chữ ký, bảng tag hay không gian màu process được hỗ trợ không hợp lệ
vtmviIccChecksumMismatchCheckSum 16 byte đã giải mã khác MD5 của toàn bộ tệp ICC
vtmviIccVersionMismatchBốn byte ICCVersion đã khai báo khác byte 8 tới 11 của header ICC
vtmviIccColorSpaceMismatchProfileCS khác byte 16 tới 19 của header ICC hoặc không phải GRAY, RGB hay CMYK
vtmviIccProfileNameMismatchProfileName không khớp bất kỳ giá trị locale profileDescriptionTag hợp lệ nào
vtmviPrintingConditionUnresolvedOutputIntent có thẩm quyền, định danh, hay phụ thuộc ICC ngoài không thể phân giải được
vtmviPrintingConditionMismatchCác part PDF/VT bất đồng về OutputConditionIdentifier, sự hiện diện hay giá trị của RegistryName, hoặc không gian màu process
vtmviIccDeviceClassMismatchMột hồ sơ đích nhúng hay ngoài không phải hồ sơ thiết bị đầu ra 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