PDFium Delphi Component Docs

FPdfPdfvtMime الوحدة

الوحدة: FPdfPdfvtMime
يبني ويتحقق من تيارات أجزاء MIME لملف PDF/VT-2s واحد تحمل مستند PDF/VT مضمّنًا وحمله المرفق القابل لإعادة الاستخدام وملف تعريف ICC كحاوية multipart واحدة

الصياغة

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 نقل PDF/VT-2s المعرف في ملحق ISO 16612-2، حيث يُحزم مستند PDF/VT مع محتوى PDF القابل لإعادة الاستخدام المُشار إليه وملف تعريف ICC كتيار MIME multipart واحد

على خلاف مسار TPdf.SaveAsPdfVT الذي يكتب ملف PDF/VT-1 مستقلًا، تعمل هذه الوحدة على تيارات البايتات بحتة ولا تحمّل pdfium.dll أبدًا، فيمكنها العمل في خوادم بلا واجهة وخطوط معالجة دفعية

يجمع 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 MIME سابق

أنواع القطع

القيمةدور MIME
vtckInlinePdfمستند PDF/VT يحمل كجزء application/pdf مضمّن؛ ويُشترط واحد على الأقل
vtckAttachmentPdfجزء محتوى PDF قابل لإعادة الاستخدام تشير إليه الوثيقة المضمّنة، يحمل كـ attachment مع اسم ملف
vtckIccProfileجزء ملف تعريف ICC (application/vnd.iccprofile) يزوَّد كمرفق مع اسم ملف

الأنواع المساندة

النوعالغرض
TPdfVT2sChunksمصفوفة ديناميكية من قطع MIME مرتبة تزوَّد إلى BuildPdfVT2sStream
TAnsiStringsمصفوفة أسماء ملفات ديناميكية تستخدم عند التحقق من مراجع الملفات الخارجية في PDF المضمّن
TPdfVT2sValidationIssuesمجموعة نتائج TPdfVT2sValidationIssue تعيدها عملية التحقق
TPdfVTPrintingConditionSourceأصل أدلة ملف التعريف: vtpcsNone عند عدم الحل، و vtpcsEmbeddedProfile لتيار DestOutputProfile مضمّن، و vtpcsMimeProfile لـ DestOutputProfileRef يُحل من جزء ICC MIME
TPdfVTPrintingConditionEvidenceتصنيف PDF/VT و PDF/X لكل جزء، و OutputIntent، ومصدر ملف التعريف، والهُوية، والملخص، وترويسة ICC، ومعطيات DPart
TPdfVT2sValidationReportنتيجة مفصلة يعيدها InspectPdfVT2sStream دون تغيير تخطيط النتيجة القديم

مشكلات التحقق

القيمةيُبلَّغ عنها عند
vtmviNotMultipartالتيار ليس حاوية MIME متعددة الأجزاء
vtmviMissingStreamVersionترويسة StreamVersion الخاصة بـ PDF/VT المطلوبة غائبة
vtmviStreamVersionValueقيمة StreamVersion ليست 1 المتوقعة
vtmviStreamVersionAfterCtيظهر StreamVersion بعد سطر Content-Type بدلًا من قبله
vtmviMissingBoundaryمعامل boundary في Content-Type مفقود
vtmviNoInlinePdfلا يوجد أي جزء PDF/VT مضمّن
vtmviInlinePdfNotPdfVTالجزء المضمّن غير معلَن كـ PDF/VT
vtmviIccProfileBadDispositionجزء ملف تعريف ICC ليس مرفقًا
vtmviAttachmentMissingFilenameجزء مرفق ينقصه اسم الملف المطلوب
vtmviInlineHasFilenameجزء PDF المضمّن يحمل اسم ملف، وهو غير مسموح
vtmviNodeNameListMismatchملفا PDF/VT في التيار يكشفان قيم NodeNameList مختلفة
vtmviRecordLevelMismatchمستويات سجلات DPart غير متسقة عبر الحاوية
vtmviForwardReferenceمرفق يُشار إليه قبل ظهوره في التيار
vtmviBoundaryInvalidCharسلسلة boundary تحتوي محارف لا يسمح بها RFC 2046
vtmviDuplicateFilenameمرفقا MIME يكشفان اسم ملف واحدًا نفسه حساسًا لحالة الأحرف
vtmviOutputIntentAmbiguousجزء PDF بلا أي OutputIntent من نوع GTS_PDFX مرجعي أو بعدة منها
vtmviOutputProfilePackagingMismatchلدى OutputIntent صيغتا ملف تعريف معًا، أو لا صيغة، أو صيغة غير متوافقة مع أساس PDF/X-4 أو PDF/X-4p أو PDF/X-5g أو PDF/X-5pg
vtmviOutputProfileReferenceInvalidيُسقط DestOutputProfileRef بيانات وصفية مطلوبة أو مواصفة ملف URL، أو يستخدم ColorantTable محظورًا
vtmviReferencedPartWrongTypeاسم الملف المُشار إليه يُحل إلى جزء MIME ليس ملف تعريف ICC
vtmviIccProfileInvalidترويسة ICC أو الحجم المعلن أو التوقيع أو جدول الوسوم أو فضاء لون العملية المدعوم غير صالح
vtmviIccChecksumMismatchيختلف CheckSum بطول 16 بايتًا المفكوك عن MD5 لملف ICC الكامل
vtmviIccVersionMismatchتختلف بايتات ICCVersion الأربعة المعلنة عن بايتات ترويسة ICC من 8 إلى 11
vtmviIccColorSpaceMismatchيختلف ProfileCS عن بايتات ترويسة ICC من 16 إلى 19 أو ليس GRAY أو RGB أو CMYK
vtmviIccProfileNameMismatchلا يطابق ProfileName أي قيمة locale صالحة في profileDescriptionTag
vtmviPrintingConditionUnresolvedتعذّر حل OutputIntent المرجعي أو المعرِّف أو تبعية ICC الخارجية
vtmviPrintingConditionMismatchتختلف أجزاء PDF/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