استرداد وتحديث معلومات العرض التقديمي في Python عبر Java

نظرة عامة

يمكن لـ Aspose.Slides تحديد تنسيق العرض التقديمي وقراءة بيانات التعريف الخاصة بالمستند دون إنشاء نموذج كائن عرض تقديمي كامل. يكون هذا مفيدًا عندما تحتاج إلى تصنيف الملفات، إنشاء جرد، أو فحص الخصائص قبل اتخاذ القرار بتحميل ومعالجة محتوى العرض التقديمي.

تتطلب الأمثلة Aspose.Slides for Python via Java وبيئة تشغيل Java متوافقة. يبدأ كل مثال تشغيل JVM إذا لم يكن قيد التشغيل بالفعل. قدم ملفات العروض التقديمية الموجودة في المسارات المستخدمة في الأمثلة.

توضح هذه المقالة فحصًا خفيف الوزن من خلال PresentationFactory وPresentationInfo، بالإضافة إلى تحديثات مستهدفة من خلال DocumentProperties.

التحقق من تنسيق العرض التقديمي

إذا كان لديك عرض تقديمي تم تحميله بالفعل، راجع Determine the Original Presentation Format للكشف بعد التحميل والقيود المتعلقة بتدفقات PPT وPPS وPOT القديمة.

استخدم PresentationFactory.getPresentationInfo لتفقد ملف دون إنشاء كائن Presentation . تُظهر طريقة PresentationInfo.getLoadFormat التنسيق المكتشف، مثل PPTX أو PPT أو ODP.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadFormat, PresentationFactory

file_names = ["pres.pptx", "pres.ppt", "pres.odp"]

for file_name in file_names:
    presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_name)
    load_format = presentation_info.getLoadFormat()
    format_name = f"Other ({load_format})"

    if load_format == LoadFormat.Pptx:
        format_name = "PPTX"
    elif load_format == LoadFormat.Ppt:
        format_name = "PPT"
    elif load_format == LoadFormat.Odp:
        format_name = "ODP"

    print(f"{file_name}: {format_name}")

إنشاء جرد عرض تقديمي خفيف الوزن

عند معالجة العديد من ملفات العروض التقديمية، قد تحتاج إلى جرد مدمج للتحقق، الفهرسة، أو نظام إدارة المستندات. في هذا السيناريو، استخدم PresentationFactory.getPresentationInfo للحصول على كائن PresentationInfo ، ثم استدعِ PresentationInfo.readDocumentProperties لقراءة بيانات التعريف الخاصة بالمستند. لا تُنشئ هذه الطريقة كائن Presentation ولا تتطلب استعراض نموذج كائن العرض التقديمي بالكامل.

توفر الخصائص الموسعة التي تُظهرها DocumentProperties القيم التالية للجرد:

الطريقة قيمة الجرد
getSlides إجمالي عدد الشرائح.
getHiddenSlides عدد الشرائح المخفية.
getNotes عدد الشرائح التي تحتوي على ملاحظات.
getParagraphs إجمالي عدد الفقرات، إذا كانت متاحة.
getWords إجمالي عدد الكلمات.
getMultimediaClips إجمالي عدد مقاطع الصوت والفيديو.

يقرأ المثال التالي هذه القيم دون إنشاء كائن Presentation ويطبع جردًا مدمجًا. كما يجمع بين getHeadingPairs وgetTitlesOfParts لعرض مجموعات المحتوى مثل الخطوط والسمات وعناوين الشرائح.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from pathlib import Path
from asposeslides.api import LoadFormat, PresentationFactory

file_path = "sample.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
document_properties = presentation_info.readDocumentProperties()

load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"

if load_format == LoadFormat.Pptx:
    format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
    format_name = "PPT"
elif load_format == LoadFormat.Odp:
    format_name = "ODP"

print(f"File: {Path(file_path).name}")
print(f"Format: {format_name}")
print(f"Title: {document_properties.getTitle()}")
print(f"Author: {document_properties.getAuthor()}")
print("Statistics:")
print(f"  Slides: {document_properties.getSlides()}")
print(f"  Hidden slides: {document_properties.getHiddenSlides()}")
print(f"  Slides with notes: {document_properties.getNotes()}")
print(f"  Paragraphs: {document_properties.getParagraphs()}")
print(f"  Words: {document_properties.getWords()}")
print(f"  Multimedia clips: {document_properties.getMultimediaClips()}")

heading_pairs = document_properties.getHeadingPairs()
titles_of_parts = document_properties.getTitlesOfParts()
heading_pairs = heading_pairs if heading_pairs is not None else []
titles_of_parts = titles_of_parts if titles_of_parts is not None else []
part_index = 0

if len(heading_pairs) == 0 or len(titles_of_parts) == 0:
    print("Content groups: not available")
else:
    print("Content groups:")

    for heading_pair in heading_pairs:
        print(f"  {heading_pair.getName()} ({heading_pair.getCount()})")

        for part_offset in range(heading_pair.getCount()):
            if part_index >= len(titles_of_parts):
                break
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

    if part_index < len(titles_of_parts):
        print("  Other parts:")

        while part_index < len(titles_of_parts):
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

توفر كل HeadingPair اسم مجموعة وعدد العناصر في تلك المجموعة. تُعيد DocumentProperties.getTitlesOfParts مصفوفة مسطحة ومُرتبة، لذا استهلك عدد العناوين المتتالية المحدد لكل زوج عنوان.

البيانات الوصفية المخزنة وقيود التنسيق

تُظهر خصائص الجرد التي تُعيدها PresentationInfo.readDocumentProperties البيانات التعريفية المتاحة في المستند الأصلي. لا يقوم Aspose.Slides بتحميل واستعراض نموذج كائن العرض التقديمي لإعادة حساب هذه القيم عند هذا الاستدعاء. تُعرّف الخصائص المفقودة بالقيم الافتراضية، وقد تكون القيم المخزنة قديمة إذا لم تقم التطبيق الذي حفظ الملف آخر مرة بتحديث خصائص المستند.

  • PPTX: يقدّم التنسيق خصائص مستند موسعة لعدد الشرائح، الملاحظات، الشرائح المخفية، الفقرات، الكلمات، ومقاطع الوسائط المتعددة، بالإضافة إلى أزواج العناوين وعناوين الأجزاء. تعتمد التوفرية على الخصائص التي كتبها مُنتج المستند.
  • PPT: يمكن للنسق الثنائي تخزين خصائص ملخص المستند المقابلة. إذا كانت الخاصية غير موجودة أو لم يتم تحديثها من قبل مُنتج المستند، تُعيد Aspose.Slides قيمتها المخزنة أو الافتراضية بدلاً من حسابها من الشرائح.
  • ODP: تُوفر بيانات تعريف OpenDocument إحصاءات عامة للمستند مثل عدد الصفحات والفقرات والكلمات، لكن هذه القيم لا تُطابق كل خاصية موسعة خاصة بـ PowerPoint. قد تكون بيانات الشرائح المخفية، ملاحظات الشرائح، الوسائط المتعددة، أزواج العناوين، وعناوين الأجزاء غير متوفرة، وقد تُعيد خصائص الجرد قيمًا افتراضية. لا تُعامل القيمة الصفرية أو المصفوفة الفارغة كدليل نهائي على أن المحتوى المقابل غير موجود.

استخدم نهج البيانات الوصفية الخفيف للجرود والفحوصات الأولية. حمّل العرض التقديمي وتفقد نموذج كائنه الحي عندما يجب أن يعكس النتيجة التغييرات في الذاكرة أو عندما تحتاج إلى التحقق من المحتوى الفعلي للعرض.

تحديث خصائص العرض التقديمي

يمكن أيضًا تغيير الخصائص التي تُعيدها [PresentationInfo.readDocumentProperties] دون إنشاء كائن [Presentation] . طبّق التغييرات باستخدام [PresentationInfo.updateDocumentProperties]، ثم اكتب العرض المرتبط باستخدام [PresentationInfo.writeBindedPresentation].

الصورة التالية تُظهر الخصائص الأصلية للمستند لعرض PowerPoint.

الخصائص الأصلية للمستند لعرض PowerPoint

يُغيّر المثال التالي العنوان ووقت الحفظ الأخير ويكتب النتيجة إلى ملف جديد:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PresentationFactory
from java.io import FileOutputStream
from java.util import Date

source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(source_file)
document_properties = presentation_info.readDocumentProperties()

document_properties.setTitle("Quarterly sales report")
last_saved_time = Date()
document_properties.setLastSavedTime(last_saved_time)

presentation_info.updateDocumentProperties(document_properties)
output_stream = FileOutputStream(output_file)
try:
    presentation_info.writeBindedPresentation(output_stream)
finally:
    output_stream.close()

الصورة التالية تُظهر الخصائص المحدثة للمستند لعرض PowerPoint.

الخصائص المحدثة للمستند لعرض PowerPoint

روابط مفيدة

للتفحص المتعلق بالأمان وإعدادات الحماية، راجع المقالات التالية:

الأسئلة المتداولة

كيف يمكنني التحقق مما إذا كانت الخطوط مدمجة وأيها؟

حمّل العرض التقديمي واستخدم Presentation.getFontsManager. استدعِ FontsManager.getEmbeddedFonts للحصول على الخطوط المدمجة وFontsManager.getFonts للحصول على الخطوط المستخدمة في العرض. قارن بين النتيجتين لتحديد الخطوط المطلوبة للعرض ولكنها غير مدمجة.

كيف يمكنني بسرعة معرفة ما إذا كان الملف يحتوي على شرائح مخفية وعددها؟

عند كفاية بيانات التعريف المخزنة للمستند، اقرأ DocumentProperties.getHiddenSlides عبر PresentationFactory.getPresentationInfo وPresentationInfo.readDocumentProperties. هذا مناسب لجرد خفيف. إذا تم تعديل العرض في الذاكرة، قد تكون البيانات المخزنة مفقودة أو قديمة، أو إذا كنت بحاجة للتحقق من القيم الحية، استعرض Presentation.getSlides وتفقد طريقة Slide.getHidden لكل شريحة بدلاً من ذلك.

هل يمكنني اكتشاف ما إذا تم استخدام حجم وشكل مخصص للشرائح، وما إذا كانت تختلف عن القيم الافتراضية؟

نعم. حمّل العرض التقديمي واستدعِ Presentation.getSlideSize. استخدم SlideSize.getType، SlideSize.getSize وSlideSize.getOrientation لمقارنة الإعدادات الحالية مع القالب والأبعاد المتوقعة.

هل هناك طريقة سريعة لمعرفة ما إذا كانت المخططات تشير إلى مصادر بيانات خارجية؟

نعم. حدّد كل Chart واستدعِ ChartData.getDataSourceType. إذا كان مصدر البيانات مصنفًا كدفتر عمل خارجي، استدعِ ChartData.getExternalWorkbookPath. يُظهر نوع المصدر والمسار إشارة مرجعية خارجية، لكن التحقق من توفر الهدف يتطلب فحص موارد منفصل.

كيف يمكنني تقييم الشرائح “الثقيلة” التي قد تبطئ عملية العرض أو تصدير PDF؟

لا توجد خاصية تعقيد واحدة. استعرض Presentation.getSlides ومجموعة BaseSlide.getShapes لكل شريحة. استخدم عدد الأشكال ووجود صور كبيرة، تأثيرات، رسومات متحركة، أو وسائط متعددة كإشارات تصفية، وقم بقياس عرض تمثيلي أو تصدير ممثل قبل اعتبار الشريحة عنق زجاجة مؤكد للأداء.