تصدير العروض التقديمية إلى HTML مع الصور المرتبطة خارجيًا
خلفية
السلوك الافتراضي لتصدير HTML هو تضمين أي مورد داخل ملف HTML. تؤدي هذه الطريقة إلى ملف HTML واحد يسهل مشاهدته وتوزيعه. جميع الموارد اللازمة مشفرة بتشفير base64 داخله. لكن لهذه الطريقة عيبين:
- حجم المخرجات أكبر بكثير بسبب تشفير base64.* من الصعب استبدال الصور الموجودة في الملف.
في هذه المقالة، سنرى كيف يمكننا تغيير السلوك الافتراضي باستخدام Aspose.Slides for Python via .NET لربط الصور خارجيًا بدلاً من تضمينها في ملف HTML. سنستخدم واجهة ILinkEmbedController التي تحتوي على ثلاث طرق للتحكم في عملية تضمين وحفظ الموارد. يمكننا تمرير هذه الواجهة إلى منشئ فئة HtmlOptions عند إعداد التصدير.
التالي هو الكود الكامل لفئة LinkController التي تنفذ واجهة ILinkEmbedController. كما ذكرنا سابقًا، يجب على LinkController تنفيذ واجهة ILinkEmbedController. تحدد هذه الواجهة ثلاث طرق:
- public LinkEmbedDecision GetObjectStoringLocation(int id, byte[] entityData, string semanticName, string contentType, string recomendedExtension) يتم استدعاؤها عندما يواجه المُصدّر موردًا ويحتاج إلى أن يقرر كيفية تخزينه. أهم المتغيرات هي ‘id’ – المعرف الفريد للمورد لعملية التصدير بالكامل و ‘contentType’ – يحتوي على نوع MIME للمورد. إذا قررنا ربط المورد، يجب أن نعيد LinkEmbedDecision.Link من هذه الطريقة. خلاف ذلك، يجب إعادة LinkEmbedDecision.Embed لتضمين المورد.
- public string GetUrl(int id, int referrer) يتم استدعاؤها للحصول على URL المورد بالشكل الذي يتم استخدامه في الملف الناتج، مثل . يتم تعريف المورد بواسطة ‘id’.
- public void SaveExternal(int id, byte[] entityData) الطريقة النهائية في التسلسل، يتم استدعاؤها عندما يتعلق الأمر بتخزين المورد خارجيًا. لدينا معرّف المورد ومحتويات المورد كمصفوفة بايت. يعود الأمر إلينا فيما يجب القيام به مع بيانات المورد المقدمة.
# [TODO[not_supported_yet]: python implementation of .net interfaces]
بعد كتابة فئة LinkController، الآن سنستخدمها مع فئة HTMLOptions لتصدير العرض التقديمي إلى HTML مع الصور المرتبطة خارجيًا باستخدام الكود التالي.
# [TODO[not_supported_yet]: python implementation of .net interfaces]
قمنا بتعيين SlideImageFormat.Svg إلى خاصية SlideImageFormat مما يعني أن ملف HTML الناتج سيحتوي على بيانات SVG بداخله لرسم محتويات العرض التقديمي.
أما بالنسبة لأنواع المحتوى، فهي تعتمد على بيانات الصورة الفعلية الموجودة في العرض التقديمي. إذا كانت هناك صور نقطية في العرض التقديمي، يجب أن يكون كود الفئة جاهزًا لمعالجة كل من نوعي المحتوى ‘image/jpeg’ و ‘image/png’. قد لا يتطابق نوع المحتوى الفعلي للصور النقطية المصدرة مع ذلك الخاص بالصورة المخزنة في العرض التقديمي. تقوم خوارزميات Aspose.Slides الداخلية بأداء تحسين حجم البيانات وتستخدم إما ترميز JPG أو PNG أيًا كان الذي ينتج أصغر حجم بيانات. الصور التي تحتوي على قناة ألفا (شفافية) دائمًا ما يتم تشفيرها إلى PNG.