استرجاع وتحديث معلومات العرض التقديمي في جافا
نظرة عامة
يمكن لـ Aspose.Slides تحديد تنسيق العرض التقديمي وقراءة البيانات الوصفية للمستند دون إنشاء نموذج كائن عرض تقديمي كامل. هذا مفيد عندما تحتاج إلى تصنيف الملفات، بناء جرد، أو فحص الخصائص قبل اتخاذ القرار بتحميل ومعالجة محتوى العرض التقديمي.
توضح هذه المقالة عملية الفحص الخفيف الوزن من خلال PresentationFactory وIPresentationInfo، بالإضافة إلى التحديثات المستهدفة عبر IDocumentProperties.
التحقق من تنسيق العرض التقديمي
استخدم 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 القيم التالية للجرد:
| Method | Inventory value |
|---|---|
| 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:

روابط مفيدة
للفحوصات الأمنية ذات الصلة وإعدادات الحماية، راجع المقالات التالية:
الأسئلة المتكررة
كيف يمكنني التحقق مما إذا كانت الخطوط مضمنة وما هي؟
حمّل العرض واستخدم 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 للشرائح. استخدم عدد الأشكال ووجود صور كبيرة، تأثيرات، رسومات متحركة، أو وسائط متعددة كإشارات فحص، وقم بقياس عرض تمثيلي أو تصدير قبل اعتبار الشريحة عنق زجاجة للأداء.