استرداد وتحديث معلومات العرض التقديمي على Android
نظرة عامة
يمكن لـ Aspose.Slides تحديد تنسيق العرض التقديمي وقراءة بيانات تعريف المستند دون إنشاء نموذج كائن عرض تقديمي كامل. يكون هذا مفيدًا عندما تحتاج إلى تصنيف الملفات، بناء جرد، أو فحص الخصائص قبل اتخاذ قرار بتحميل ومعالجة محتوى العرض التقديمي.
توضح هذه المقالة الفحص الخفيف الوزن من خلال PresentationFactory وIPresentationInfo، بالإضافة إلى التحديثات المستهدفة من خلال IDocumentProperties.
التحقق من تنسيق العرض التقديمي
إذا كان لديك عرض تقديمي محمَّل بالفعل، راجع Determine the Original Presentation Format للاكتشاف بعد التحميل وقيود تدفقات PPT وPPS وPOT القديمة.
استخدم PresentationFactory.getPresentationInfo لفحص ملف دون إنشاء مثيل من Presentation. تقوم طريقة IPresentationInfo.getLoadFormat بالإبلاغ عن التنسيق المكتشف، مثل PPTX أو PPT أو ODP.
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
String[] fileNames = { "pres.pptx", "pres.ppt", "pres.odp" };
for (String fileName : fileNames) {
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(fileName);
int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";
if (loadFormat == LoadFormat.Pptx) {
formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
formatName = "ODP";
}
System.out.println(fileName + ": " + formatName);
}
إنشاء جرد عرض تقديمي خفيف الوزن
عند معالجة العديد من ملفات العروض التقديمية، قد تحتاج إلى جرد مضغوط للتحقق، الفهرسة، أو نظام إدارة المستندات. في هذا السيناريو، استخدم PresentationFactory.getPresentationInfo للحصول على كائن IPresentationInfo، ثم استدعِ IPresentationInfo.readDocumentProperties لقراءة بيانات تعريف المستند. لا ينشئ هذا النهج مثيلًا من Presentation ولا يتطلب استعراض نموذج كائن العرض الكامل.
توفر الخصائص الموسعة التي يكشف عنها IDocumentProperties القيم التالية للجرد:
| الطريقة | قيمة الجرد |
|---|---|
| getSlides | العدد الإجمالي للشرائح. |
| getHiddenSlides | عدد الشرائح المخفية. |
| getNotes | عدد الشرائح التي تحتوي على ملاحظات. |
| getParagraphs | العدد الإجمالي للفقرات، إذا كان متاحًا. |
| getWords | العدد الإجمالي للكلمات. |
| getMultimediaClips | العدد الإجمالي لمقاطع الصوت والفيديو. |
تقرأ المثال التالي هذه القيم دون إنشاء كائن Presentation وتطبع جردًا مضغوطًا. كما يجمع بين getHeadingPairs وgetTitlesOfParts لعرض مجموعات محتوى مثل الخطوط، السمات، وعناوين الشرائح.
import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IHeadingPair;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
import java.nio.file.Paths;
String filePath = "sample.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(filePath);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();
int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";
if (loadFormat == LoadFormat.Pptx) {
formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
formatName = "ODP";
}
System.out.println("File: " + Paths.get(filePath).getFileName());
System.out.println("Format: " + formatName);
System.out.println("Title: " + documentProperties.getTitle());
System.out.println("Author: " + documentProperties.getAuthor());
System.out.println("Statistics:");
System.out.println(" Slides: " + documentProperties.getSlides());
System.out.println(" Hidden slides: " + documentProperties.getHiddenSlides());
System.out.println(" Slides with notes: " + documentProperties.getNotes());
System.out.println(" Paragraphs: " + documentProperties.getParagraphs());
System.out.println(" Words: " + documentProperties.getWords());
System.out.println(" Multimedia clips: " + documentProperties.getMultimediaClips());
IHeadingPair[] headingPairs = documentProperties.getHeadingPairs();
String[] titlesOfParts = documentProperties.getTitlesOfParts();
headingPairs = headingPairs != null ? headingPairs : new IHeadingPair[0];
titlesOfParts = titlesOfParts != null ? titlesOfParts : new String[0];
int partIndex = 0;
if (headingPairs.length == 0 || titlesOfParts.length == 0) {
System.out.println("Content groups: not available");
} else {
System.out.println("Content groups:");
for (IHeadingPair headingPair : headingPairs) {
System.out.println(" " + headingPair.getName() + " (" + headingPair.getCount() + ")");
for (int partOffset = 0; partOffset < headingPair.getCount() && partIndex < titlesOfParts.length; partOffset++) {
System.out.println(" - " + titlesOfParts[partIndex]);
partIndex++;
}
}
if (partIndex < titlesOfParts.length) {
System.out.println(" Other parts:");
while (partIndex < titlesOfParts.length) {
System.out.println(" - " + titlesOfParts[partIndex]);
partIndex++;
}
}
}
كل IHeadingPair يوفّر اسم مجموعة وعدد العناصر في تلك المجموعة. تُرجع IDocumentProperties.getTitlesOfParts مصفوفة مسطحة مرتبة، لذا استهلك عدد العناوين المتتالية المحدد بواسطة كل زوج عنوان.
البيانات المخزنة وقيود التنسيق
تعكس الخصائص التي تُعيدها IPresentationInfo.readDocumentProperties البيانات التعريفية المتوفرة في المستند الأصلي. لا تقوم Aspose.Slides بتحميل واستعراض نموذج كائن العرض لإعادة حساب هذه القيم عند هذه الاستدعاءات. تُمثَّل الخصائص المفقودة بقيم افتراضية، وقد تكون القيم المخزنة قديمة إذا لم تُحدِّث التطبيق الذي حفظ الملف آخر مرة خصائص المستند.
- PPTX: يوفر التنسيق خصائص مستند موسعة لعدد الشرائح، الملاحظات، الشرائح المخفية، الفقرات، الكلمات، والمقاطع المتعددة الوسائط، بالإضافة إلى أزواج العناوين وعناوين الأجزاء. تعتمد التوافرية على الخصائص التي كتبها منتج المستند.
- PPT: يمكن للنسق الثنائي تخزين خصائص ملخص المستند المقابلة. إذا كانت الخاصية غائبة أو لم يُحدِّثها منتج المستند، تُعيد Aspose.Slides قيمتها المخزنة أو القيمة الافتراضية بدلًا من حسابها من الشرائح.
- ODP: توفر بيانات تعريف OpenDocument إحصاءات عامة للمستند مثل عدد الصفحات، الفقرات، والكلمات، لكن هذه القيم لا تتطابق مع كل خاصية موسعة خاصة بـ PowerPoint. قد تكون بيانات الشرائح المخفية، ملاحظات الشرائح، الوسائط المتعددة، أزواج العناوين، وعناوين الأجزاء غير متوفرة، وقد تُعيد خصائص الجرد قيمًا افتراضية. لا تُعامل القيمة الصفرية أو المصفوفة الفارغة كدليل قاطع على غياب المحتوى المقابل.
استخدم نهج البيانات التعريفية الخفيف للجرد والفحوصات الأولية. احمِل العرض وتفحص نموذج كائنه الحي عندما يجب أن يعكس النتيجة تغييرات الذاكرة أو عندما تحتاج إلى التحقق من المحتوى الفعلي للعرض.
تحديث خصائص العرض التقديمي
يمكن أيضًا تعديل الخصائص التي تُعيدها IPresentationInfo.readDocumentProperties دون إنشاء مثيل من Presentation. طبِّق التغييرات باستخدام IPresentationInfo.updateDocumentProperties، ثم اكتب العرض المرتبط باستخدام IPresentationInfo.writeBindedPresentation.
الصورة التالية توضح خصائص المستند الأصلية لعرض PowerPoint.

المثال التالي يغيّر العنوان ووقت الحفظ الأخير ويكتب النتيجة إلى ملف جديد:
import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
String sourceFile = "sample.pptx";
String outputFile = "sample_with_updated_properties.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(sourceFile);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();
documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(new Date());
presentationInfo.updateDocumentProperties(documentProperties);
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
presentationInfo.writeBindedPresentation(outputStream);
}
الصورة التالية توضح خصائص المستند المحدثة لعرض PowerPoint.

روابط مفيدة
للفحوصات الأمنية ذات الصلة وإعدادات الحماية، راجع المقالات التالية:
FAQ
كيف يمكنني التحقق مما إذا كانت الخطوط مدمجة وأيها؟
حمِّل العرض واستخدم Presentation.getFontsManager. استدعِ IFontsManager.getEmbeddedFonts للحصول على الخطوط المدمجة وIFontsManager.getFonts للحصول على الخطوط المستخدمة في العرض. قارن النتيجتين لتحديد الخطوط المطلوبة للعرض ولكن غير مدمجة.
كيف يمكنني بسرعة معرفة ما إذا كان الملف يحتوي على شرائح مخفية وعددها؟
عند كفاية بيانات تعريف المستند المخزنة، اقرأ IDocumentProperties.getHiddenSlides عبر PresentationFactory.getPresentationInfo وIPresentationInfo.readDocumentProperties. هذا مناسب لجرد خفيف. إذا كان العرض قد تم تعديلُه في الذاكرة، قد تكون البيانات المخزنة مفقودة أو قديمة، أو تحتاج للتحقق من القيم الحية، فاستعرض Presentation.getSlides وتفحص طريقة ISlide.getHidden لكل شريحة بدلاً من ذلك.
هل يمكنني اكتشاف ما إذا كان حجم الشريحة المخصص والاتجاه مستخدمين، وما إذا كانا يختلفان عن القيم الافتراضية؟
نعم. حمِّل العرض واستدعِ Presentation.getSlideSize. استخدم ISlideSize.getType، ISlideSize.getSize، وISlideSize.getOrientation لمقارنة الإعدادات الحالية مع القالب والأبعاد المتوقعة.
هل هناك طريقة سريعة لمعرفة ما إذا كان الرسوم البيانية تشير إلى مصادر بيانات خارجية؟
نعم. حدد كل Chart واستدعِ IChartData.getDataSourceType. لدفتر عمل خارجي، استدعِ IChartData.getExternalWorkbookPath. يحدد نوع مصدر البيانات والمسار إشارة إلى مرجع خارجي، لكن التحقق من توفر الهدف يتطلب فحصًا منفصلًا للموارد.
كيف يمكنني تقييم “الشرائح الثقيلة” التي قد تُبطئ العرض أو تصدير PDF؟
لا توجد خاصية تعقيد واحدة. استعرض Presentation.getSlides وكل مجموعة IBaseSlide.getShapes لكل شريحة. استخدم عدد الأشكال ووجود صور كبيرة، تأثيرات، رسوم متحركة، أو وسائط متعددة كإشارات فحص، وقم بقياس عملية عرض أو تصدير تمثلية قبل اعتبار الشريحة عبئًا مؤكدًا على الأداء.