تحديد صيغة العرض التقديمي الأصلية في .NET

نظرة عامة

بعد تحميل عرض تقديمي، اقرأ الخاصية للقراءة فقط Presentation.SourceFormat لتحديد صيغته الأصلية. الخاصية متاحة أيضاً عبر IPresentation.SourceFormat. استخدمها عندما يعتمد المعالجة اللاحقة على الصيغة التي تم تحميل الكائن الحالي منها.

صيغة المصدر تختلف عن SaveFormat المختارة لملف الإخراج. الحفظ إلى صيغة أخرى لا يغيّر صيغة المصدر للكائن الحالي.

قراءة صيغة المصدر لملف

هذا المثال يتطلب ملف sample.pptx موجوداً. يقوم بتحميل الملف ويختار سياسة معالجة التطبيق باستخدام Presentation.SourceFormat، بدلاً من اسم الملف. غيّر مسار الإدخال لتجربة صيغ أخرى. يطبع المثال السياسة المختارة؛ استبدل الرسائل بمنطق تطبيقك.

using System;
using Aspose.Slides;

using var presentation = new Presentation("sample.pptx");

switch (presentation.SourceFormat)
{
    case SourceFormat.Ppt:
    case SourceFormat.Pps:
    case SourceFormat.Pot:
        Console.WriteLine("Use the legacy PowerPoint processing policy.");
        break;
    case SourceFormat.Pptx:
        Console.WriteLine("Use the standard PPTX processing policy.");
        break;
    default:
        Console.WriteLine($"Use the general policy for {presentation.SourceFormat}.");
        break;
}

التعرف على القيم المدعومة

عدد SourceFormat يميز الصيغ التالية للعروض التقديمية. الامتدادات أدناه هي امتدادات شائعة، وليست إعادة بناء لاسم الملف الأصلي.

قيمة SourceFormat الامتداد الصيغة
Ppt .ppt عرض PowerPoint 97–2003
Pptx .pptx عرض Office Open XML
Pptm .pptm عرض Office Open XML مع تمكين الماكرو
Pps .pps عرض شرائح PowerPoint 97–2003
Ppsx .ppsx عرض شرائح Office Open XML
Ppsm .ppsm عرض شرائح Office Open XML مع تمكين الماكرو
Pot .pot قالب PowerPoint 97–2003
Potx .potx قالب Office Open XML
Potm .potm قالب Office Open XML مع تمكين الماكرو
Odp .odp عرض OpenDocument
Otp .otp قالب OpenDocument
Fodp .fodp عرض OpenDocument XML مسطح
Xml .xml عرض PowerPoint XML

قراءة صيغة المصدر لتدفق بيانات

هذا المثال يتطلب ملف sample.pps موجوداً. قراءة بايتاته إلى تدفق ذاكرة يحاكي إدخالًا مستلمًا بدون اسم ملف، مثل قيمة قاعدة بيانات أو مصفوفة بايتات تم رفعها. المُنشئ Presentation يتلقى فقط التدفق.

using System;
using System.IO;
using Aspose.Slides;

var bytes = File.ReadAllBytes("sample.pps");
using var stream = new MemoryStream(bytes);
using var presentation = new Presentation(stream);

Console.WriteLine($"Source format: {presentation.SourceFormat}");

تستخدم PPT و PPS و POT نفس الصيغة الثنائية الأساسية. عند التحميل عبر مسار ملف، يمكن للامتداد أن يساعد في تمييز عرض الشرائح أو القالب. بدون اسم ملف، قد يُبلغ عن محتوى PPS أو POT القديم كـ SourceFormat.Ppt؛ مثال PPS أعلاه يُبلغ عن Ppt.

إذا كان تطبيقك يحتاج إلى الحفاظ على هذا التمييز، احتفظ باسم الملف الأصلي أو بيانات التعريف الفرعية بشكل منفصل. الامتداد هو تلميح مفيد لهذه الأنواع القديمة، لكنه لا يجب أن يكون الأساس الوحيد لتحديد محتوى عرض تقديمي عشوائي.

مقارنة الاكتشاف قبل وبعد التحميل

استخدم PresentationFactory.GetPresentationInfo و IPresentationInfo.LoadFormat عندما تحتاج إلى فحص ملف قبل تحميل نموذج كائن العرض بالكامل. استخدم Presentation.SourceFormat عندما يكون الكائن موجوداً بالفعل.

هذا المثال يتطلب sample.pptx ويطبع Pptx لكل من الفحصين. في الإنتاج، اختر الـ API المناسب لمرحلة المعالجة؛ العرض الذي تم تحميله بالفعل لا يحتاج إلى فحص ثانٍ فقط للحصول على صيغة المصدر.

using System;
using Aspose.Slides;

var path = "sample.pptx";
var information = PresentationFactory.Instance.GetPresentationInfo(path);
Console.WriteLine($"Before loading: {information.LoadFormat}");

using var presentation = new Presentation(path);
Console.WriteLine($"After loading: {presentation.SourceFormat}");

النتائج لها أنواع تعداد مختلفة: LoadFormat و SourceFormat. لا تقارنهما بتحويل القيم العددية أو تفترض أن كل صيغة لديها نتائج اكتشاف متطابقة. في فحص الحفظ وإعادة الفتح الموضح أدناه، تم الإبلاغ عن PowerPoint XML كـ LoadFormat.Unknown قبل التحميل وSourceFormat.Xml بعد التحميل.

الحفاظ على صيغ المصدر والإخراج منفصلة

هذا المثال يتطلب sample.pptx ويكتب converted.odp. يطبع Pptx قبل وبعد حفظ النسخة الأصلية. فقط النسخة الجديدة التي تم تحميلها من إخراج ODP تُبلغ عن Odp.

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("sample.pptx");
Console.WriteLine($"Before saving: {presentation.SourceFormat}");

presentation.Save("converted.odp", SaveFormat.Odp);
Console.WriteLine($"After saving: {presentation.SourceFormat}");

using var reopened = new Presentation("converted.odp");
Console.WriteLine($"Reopened output: {reopened.SourceFormat}");

العرض الذي تم إنشاؤه من الصفر باستخدام new Presentation() يُبلغ عن SourceFormat.Pptx. لا يوجد ملف إدخال: هذه هي القيمة الافتراضية لكائن تم إنشاؤه حديثاً، ليست دليلًا على تحميل ملف PPTX. تتبع ما إذا كان تطبيقك قد أنشأ أو حمّل الكائن بشكل منفصل إذا كان هذا التمييز مهمًا.

تحويل صيغة المصدر إلى امتداد

المثال التالي يتطلب sample.pptx. يربط كل قيمة مدعومة حالياً في SourceFormat بامتداد شائع، دون تحليل اسم الملف المدخل. الفحص الاحتياطي يتجنب تعيين امتداد صامت لقيمة غير معروفة.

using System;
using Aspose.Slides;

using var presentation = new Presentation("sample.pptx");
var extension = presentation.SourceFormat switch
{
    SourceFormat.Ppt => ".ppt",
    SourceFormat.Pptx => ".pptx",
    SourceFormat.Pptm => ".pptm",
    SourceFormat.Pps => ".pps",
    SourceFormat.Ppsx => ".ppsx",
    SourceFormat.Ppsm => ".ppsm",
    SourceFormat.Pot => ".pot",
    SourceFormat.Potx => ".potx",
    SourceFormat.Potm => ".potm",
    SourceFormat.Odp => ".odp",
    SourceFormat.Otp => ".otp",
    SourceFormat.Fodp => ".fodp",
    SourceFormat.Xml => ".xml",
    _ => null
};

Console.WriteLine(extension ?? "No extension mapping is available.");

هذا الربط لا يبدل ملفًا ولا يستعيد نوع فرعي قديم مفقود أثناء تحميل التدفق. للحفظ الفعلي، اختر SaveFormat صراحةً، أو استخدم التحويل الموضح في Save Presentations in Their Original Format.

التحقق من الصيغ عبر الحفظ وإعادة الفتح

هذا المثال المستقل يخلق عرضًا ويكتب ثلاثة ملفات في دليل العمل، مستبدلاً الملفات ذات نفس الأسماء. يعيد فتح كل مخرج إما عبر المسار أو عبر تدفق ذاكرة. بالنسبة إلى PPTX و ODP، كلا المسارين يُبلغان عن الصيغة المحفوظة. بالنسبة إلى PPS، يُبلغ التحميل عبر المسار عن Pps، بينما التحميل من نفس البايتات دون اسم ملف يُبلغ عن Ppt.

using System;
using System.IO;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var formats = new[] { SaveFormat.Pptx, SaveFormat.Odp, SaveFormat.Pps };

foreach (var format in formats)
{
    var path = $"roundtrip.{format.ToString().ToLowerInvariant()}";
    presentation.Save(path, format);

    using var fromFile = new Presentation(path);
    var bytes = File.ReadAllBytes(path);
    using var stream = new MemoryStream(bytes);
    using var fromStream = new Presentation(stream);

    Console.WriteLine($"{format}: file={fromFile.SourceFormat}, stream={fromStream.SourceFormat}");
}

نفس الفحص مع جميع الصيغ المذكورة أعلاه أنتج النتائج التالية للعروض المولدة مع امتدادات مطابقة:

صيغة الحفظ SourceFormat من مسار ملف SourceFormat من تدفق بدون اسم
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm على التوالي كما في مسار الملف
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm على التوالي كما في مسار الملف
POT Pot Ppt
POTX, POTM Potx, Potm على التوالي كما في مسار الملف
ODP, OTP Odp, Otp على التوالي كما في مسار الملف
FODP Fodp Fodp
PowerPoint XML Xml Xml

في هذه الفحوصات، كان التوحيد الوحيد لصيغة المصدر هو تحويل PPS/POT إلى Ppt للتدفق بدون اسم. يصف الجدول تحديد الصيغة، وليس الحفاظ على كل ميزة في العرض أثناء التحويل.

الأسئلة المتكررة

هل تغيير الحفظ إلى ODP صيغة المصدر لعرض تم تحميله من PPTX؟

لا. الكائن الحالي لا يزال يُبلغ عن Pptx. الكائن الذي تم تحميله من ملف ODP المحفوظ يُبلغ عن Odp.

هل يمكن للتدفق دائمًا تمييز عرض تقديمي قديم، أو عرض شرائح، أو قالب؟

لا. الصيغة الثنائية مشتركة بين PPT و PPS و POT. احتفظ باسم الملف أو بيانات التعريف الفرعية بشكل منفصل عندما يكون هذا التمييز مطلوبًا.

أي API يجب أن أستخدمه إذا كان العرض قد تم تحميله بالفعل؟

اقرأ Presentation.SourceFormat. استخدم PresentationFactory.GetPresentationInfo للفحص قبل التحميل.