PDFium Delphi Component Docs

FPdfPdfvtMime واحد

واحد: FPdfPdfvtMime
جریان‌های MIME بخشی از PDF/VT-2s تک‌فایلی را می‌سازد و اعتبارسنجی می‌کند؛ ظرفی چندبخشی که سند PDF/VT درون‌خطی، بار پیوست قابل استفادهٔ مجدد آن و پروفایل ICC را با هم حمل می‌کند

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 بستر انتقال PDF/VT-2s تعریف‌شده در ضمیمهٔ ISO 16612-2 را پیاده‌سازی می‌کند؛ بستری که در آن سند PDF/VT به‌همراه محتوای PDF قابل استفادهٔ مجدد ارجاع‌شده و پروفایل ICC به‌صورت یک جریان MIME چندبخشی واحد بسته‌بندی می‌شوند

برخلاف مسیر TPdf.SaveAsPdfVT که یک فایل مستقل PDF/VT-1 می‌نویسد، این واحد صرفاً روی جریان‌های بایتی کار می‌کند و هرگز pdfium.dll را بارگذاری نمی‌کند؛ پس می‌تواند در سرورهای headless و خطوط لولهٔ دسته‌ای اجرا شود

BuildPdfVT2sStream بخش‌ها را به ترتیب سرهم می‌کند و هدر StreamVersion، مرزهای بخش‌ها و هدرهای Content-Type / Content-Disposition هر بخش را تولید می‌کند؛ ValidatePdfVT2sStream یک جریان موجود را دوباره تجزیه می‌کند و انحراف‌های ساختاری، شرط چاپ و ICC را به‌صورت مجموعه‌ای نوع‌دار از مسائل گزارش می‌کند

InspectPdfVT2sStream همان نتیجهٔ سازگاری را به‌علاوهٔ شواهد هر بخش PDF/VT برمی‌گرداند؛ شامل انطباق PDF/VT، پایهٔ PDF/X، هویت OutputIntent، منشأ پروفایل، MD5 و SHA-256، فرادادهٔ خام ICC و شمار صفحات و رکوردهای گیرندهٔ DPart

هر بخش PDF ابتدا با ValidatePdfVTCompliance طبقه‌بندی می‌شود؛ پیوست‌های قابل استفادهٔ مجددِ فقط-PDF/X همچنان هدف ارجاع مجاز می‌مانند اما از مقایسه‌های سلسله‌مراتب PDF/VT و شرط چاپ کنار گذاشته می‌شوند

بسته‌بندی پروفایل از پایهٔ فایل پیروی می‌کند: PDF/VT-1 با PDF/X-4 و PDF/VT-2 با PDF/X-5g از یک DestOutputProfile جاسازی‌شده استفاده می‌کنند، در حالی که PDF/VT-2 با PDF/X-4p یا PDF/X-5pg از DestOutputProfileRef استفاده می‌کند که به یک بخش ICC پیشین حل می‌شود

Chunk kinds

ValueMIME role
vtckInlinePdfیک سند PDF/VT به‌عنوان بخشی درون‌خطی از نوع application/pdf؛ دست‌کم یکی لازم است
vtckAttachmentPdfیک بخش محتوای PDF قابل استفادهٔ مجدد که سند درون‌خطی به آن ارجاع می‌دهد و به‌صورت attachment همراه با نام فایل حمل می‌شود
vtckIccProfileیک بخش پروفایل ICC (application/vnd.iccprofile) که به‌صورت پیوست همراه با نام فایل داده می‌شود

Supporting types

TypePurpose
TPdfVT2sChunksآرایهٔ پویای بخش‌های MIME مرتب که به BuildPdfVT2sStream داده می‌شود
TAnsiStringsآرایهٔ پویای نام فایل که هنگام اعتبارسنجی ارجاعات فایل بیرونی در PDF درون‌خطی استفاده می‌شود
TPdfVT2sValidationIssuesمجموعهٔ یافته‌های TPdfVT2sValidationIssue که اعتبارسنجی برمی‌گرداند
TPdfVTPrintingConditionSourceخاستگاه شواهد پروفایل: vtpcsNone وقتی حل نشده، vtpcsEmbeddedProfile برای جریان DestOutputProfile جاسازی‌شده و vtpcsMimeProfile برای DestOutputProfileRefای که از یک بخش ICC حل شده است
TPdfVTPrintingConditionEvidenceطبقه‌بندی هر-بخشی PDF/VT و PDF/X، OutputIntent، منبع پروفایل، هویت، هش، هدر ICC و داده‌های DPart
TPdfVT2sValidationReportنتیجهٔ تفصیلی که InspectPdfVT2sStream برمی‌گرداند، بدون تغییر چیدمان نتیجهٔ قدیمی

Validation issues

ValueReported when
vtmviNotMultipartجریان یک ظرف MIME چندبخشی نباشد
vtmviMissingStreamVersionهدر الزامی PDF/VT StreamVersion غایب باشد
vtmviStreamVersionValueمقدار StreamVersion همان 1 مورد انتظار نباشد
vtmviStreamVersionAfterCtStreamVersion پس از خط Content-Type بیاید نه پیش از آن
vtmviMissingBoundaryپارامتر مرز Content-Type غایب باشد
vtmviNoInlinePdfهیچ بخش PDF/VT درون‌خطی‌ای حاضر نباشد
vtmviInlinePdfNotPdfVTبخش درون‌خطی به‌عنوان PDF/VT اعلان نشده باشد
vtmviIccProfileBadDispositionیک بخش پروفایل ICC پیوست نباشد
vtmviAttachmentMissingFilenameیک بخش پیوست، نام فایل الزامی را نداشته باشد
vtmviInlineHasFilenameبخش PDF درون‌خطی نام فایل حمل کند، که مجاز نیست
vtmviNodeNameListMismatchدو فایل PDF/VT در جریان مقادیر NodeNameList متفاوتی افشا کنند
vtmviRecordLevelMismatchسطوح رکورد DPart در سراسر ظرف ناسازگار باشند
vtmviForwardReferenceبه یک پیوست پیش از ظهورش در جریان ارجاع شود
vtmviBoundaryInvalidCharرشتهٔ مرز نویسه‌هایی داشته باشد که RFC 2046 اجازه نمی‌دهد
vtmviDuplicateFilenameدو پیوست MIME همان نام فایل حساس به بزرگی حروف را افشا کنند
vtmviOutputIntentAmbiguousیک بخش PDF صفر یا چند OutputIntent مرجع GTS_PDFX داشته باشد
vtmviOutputProfilePackagingMismatchOutputIntent هر دو شکل پروفایل را داشته باشد، هیچ شکلی نداشته باشد یا شکلی ناسازگار با پایهٔ PDF/X-4، PDF/X-4p، PDF/X-5g یا PDF/X-5pg داشته باشد
vtmviOutputProfileReferenceInvalidیک DestOutputProfileRef فرادادهٔ الزامی یا مشخصات فایل URL را نداشته باشد یا از ColorantTable ممنوع استفاده کند
vtmviReferencedPartWrongTypeنام فایل ارجاع‌شده به بخشی از نوع MIME حل شود که پروفایل ICC نباشد
vtmviIccProfileInvalidهدر ICC، اندازهٔ اعلان‌شده، امضا، جدول تگ یا فضای رنگ فرایندی پشتیبانی‌شده نامعتبر باشد
vtmviIccChecksumMismatchCheckSum رمزگشایی‌شدهٔ ۱۶ بایتی با MD5 کل فایل ICC تفاوت داشته باشد
vtmviIccVersionMismatchچهار بایت اعلان‌شدهٔ ICCVersion با بایت‌های ۸ تا ۱۱ هدر ICC تفاوت داشته باشد
vtmviIccColorSpaceMismatchProfileCS با بایت‌های ۱۶ تا ۱۹ هدر ICC تفاوت داشته باشد یا GRAY، RGB یا CMYK نباشد
vtmviIccProfileNameMismatchProfileName با هیچ مقدار locale معتبر profileDescriptionTag مطابق نباشد
vtmviPrintingConditionUnresolvedOutputIntent مرجع، شناسه یا وابستگی ICC بیرونی قابل حل نباشد
vtmviPrintingConditionMismatchبخش‌های PDF/VT در OutputConditionIdentifier، حضور یا مقدار RegistryName یا فضای رنگ فرایندی هم‌نظر نباشند
vtmviIccDeviceClassMismatchپروفایل مقصد جاسازی‌شده یا بیرونی، پروفایل دستگاه خروجی از نوع 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