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

نظرة عامة

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

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

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

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

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    source_format = presentation.source_format
    if source_format in (slides.SourceFormat.PPT, slides.SourceFormat.PPS, slides.SourceFormat.POT):
        print("Use the legacy PowerPoint processing policy.")
    elif source_format == slides.SourceFormat.PPTX:
        print("Use the standard PPTX processing policy.")
    else:
        print(f"Use the general policy for {source_format.name}.")

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

تُميز تعداد 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 فقط التدفق.

import io
import aspose.slides as slides

with open("sample.pps", "rb") as input_file:
    data = input_file.read()

with io.BytesIO(data) as stream:
    with slides.Presentation(stream) as presentation:
        print(f"Source format: {presentation.source_format.name}")

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

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

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

استخدم PresentationFactory.get_presentation_info و PresentationInfo.load_format عندما تحتاج إلى فحص ملف قبل تحميل نموذج كائن العرض التقديمي الكامل. استخدم Presentation.source_format عندما يكون الكائن موجودًا بالفعل.

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

import aspose.slides as slides

path = "sample.pptx"
information = slides.PresentationFactory.instance.get_presentation_info(path)
print(f"Before loading: {information.load_format.name}")

with slides.Presentation(path) as presentation:
    print(f"After loading: {presentation.source_format.name}")

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

الإبقاء على صيغ المصدر والإخراج منفصلة

هذا المثال يتطلب sample.pptx ويكتب converted.odp. يطبع PPTX قبل وبعد حفظ الكائن الأصلي. فقط الكائن الجديد المحمّل من مخرجات ODP يعلن ODP.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    print(f"Before saving: {presentation.source_format.name}")

    presentation.save("converted.odp", slides.export.SaveFormat.ODP)
    print(f"After saving: {presentation.source_format.name}")

with slides.Presentation("converted.odp") as reopened:
    print(f"Reopened output: {reopened.source_format.name}")

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

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

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

import aspose.slides as slides

extensions = {
    slides.SourceFormat.PPT: ".ppt",
    slides.SourceFormat.PPTX: ".pptx",
    slides.SourceFormat.PPTM: ".pptm",
    slides.SourceFormat.PPS: ".pps",
    slides.SourceFormat.PPSX: ".ppsx",
    slides.SourceFormat.PPSM: ".ppsm",
    slides.SourceFormat.POT: ".pot",
    slides.SourceFormat.POTX: ".potx",
    slides.SourceFormat.POTM: ".potm",
    slides.SourceFormat.ODP: ".odp",
    slides.SourceFormat.OTP: ".otp",
    slides.SourceFormat.FODP: ".fodp",
    slides.SourceFormat.XML: ".xml",
}

with slides.Presentation("sample.pptx") as presentation:
    extension = extensions.get(presentation.source_format)
    print(extension if extension is not None else "No extension mapping is available.")

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

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

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

import io
import aspose.slides as slides

formats = [slides.export.SaveFormat.PPTX, slides.export.SaveFormat.ODP, slides.export.SaveFormat.PPS]

with slides.Presentation() as presentation:
    for output_format in formats:
        path = f"roundtrip.{output_format.name.lower()}"
        presentation.save(path, output_format)

        with open(path, "rb") as input_file:
            data = input_file.read()

        with slides.Presentation(path) as from_file:
            with io.BytesIO(data) as stream:
                with slides.Presentation(stream) as from_stream:
                    print(f"{output_format.name}: file={from_file.source_format.name}, stream={from_stream.source_format.name}")

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

الصيغة المحفوظة 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 تشترك في الصيغة الثنائية. احتفظ باسم الملف أو ببيانات التعريف الفرعية بشكل منفصل عندما يكون هذا التمييز مطلوبًا.

أي واجهة برمجة تطبيقات يجب استخدامها إذا كان العرض مُحمَّلاً بالفعل؟

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