فتح العروض التقديمية في C++
نظرة عامة
بجانب إنشاء عروض PowerPoint من الصفر، تتيح لك Aspose.Slides أيضًا فتح العروض التقديمية الموجودة. بعد تحميل عرض تقديمي، يمكنك استرجاع معلومات عنه، تعديل محتوى الشريحة، إضافة شرائح جديدة، إزالة الشرائح الحالية، والمزيد.
فتح العروض التقديمية
لفتح عرض تقديمي موجود، قم بإنشاء كائن من الفئة Presentation ومرّر مسار الملف إلى مُنشئها.
المثال التالي بلغة C++ يوضح كيفية فتح عرض تقديمي والحصول على عدد الشرائح فيه:
// إنشاء كائن من الفئة Presentation وتمرير مسار ملف إلى المُنشئ الخاص بها.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
// اطبع العدد الإجمالي للشرائح في العرض التقديمي.
Console::WriteLine(presentation->get_Slides()->get_Count());
presentation->Dispose();
فتح العروض التقديمية المحمية بكلمة مرور
عند الحاجة إلى فتح عرض تقديمي محمي بكلمة مرور، مرّر كلمة المرور عبر الطريقة set_Password في الفئة LoadOptions لفك التشفير وتحميله. يوضح الكود التالي بلغة C++ هذه العملية:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
// تنفيذ عمليات على العرض التقديمي المفكوك.
presentation->Dispose();
فتح العروض التقديمية الكبيرة
توفر Aspose.Slides خيارات—وخاصة الطريقة get_BlobManagementOptions في الفئة LoadOptions—لمساعدتك على تحميل عروض تقديمية كبيرة.
يُظهر الكود التالي بلغة C++ كيفية تحميل عرض تقديمي كبير (على سبيل المثال، 2 جيجابايت):
auto filePath = u"LargePresentation.pptx";
auto loadOptions = MakeObject<LoadOptions>();
// اختر سلوك KeepLocked — سيبقى ملف العرض مقفلًا طوال عمر
// كائن Presentation، ولكن لا يلزم تحميله إلى الذاكرة أو نسخه إلى ملف مؤقت.
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 ميغابايت
auto presentation = MakeObject<Presentation>(filePath, loadOptions);
// تم تحميل العرض التقديمي الكبير ويمكن استخدامه، مع بقاء استهلاك الذاكرة منخفضًا.
// قم بإجراء تغييرات على العرض التقديمي.
presentation->get_Slide(0)->set_Name(u"Large presentation");
// احفظ العرض التقديمي إلى ملف آخر. يظل استهلاك الذاكرة منخفضًا أثناء هذه العملية.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);
// لا تفعل ذلك! سيُطرح استثناء I/O لأن الملف مقفل حتى يتم تحرير كائن العرض التقديمي.
File::Delete(filePath);
presentation->Dispose();
// يمكن القيام بذلك هنا. لم يعد ملف المصدر مقفلًا بواسطة كائن العرض التقديمي.
File::Delete(filePath);
Info
لتجاوز بعض القيود عند العمل مع التدفقات، قد تقوم Aspose.Slides بنسخ محتويات التدفق. تحميل عرض تقديمي كبير من تدفق يؤدي إلى نسخ العرض وبالتالي قد يبطئ عملية التحميل. لذلك، عند الحاجة إلى تحميل عرض تقديمي كبير، نوصي بشدة باستخدام مسار ملف العرض بدلاً من التدفق.
عند إنشاء عرض تقديمي يحتوي على كائنات كبيرة (فيديو، صوت، صور عالية الدقة، إلخ)، يمكنك استخدام BLOB management لتقليل استهلاك الذاكرة.
التحكم في الموارد الخارجية
توفر Aspose.Slides الواجهة IResourceLoadingCallback التي تتيح لك إدارة الموارد الخارجية. يوضح الكود التالي بلغة C++ كيفية استخدام واجهة IResourceLoadingCallback:
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
{
if (args->get_OriginalUri().EndsWith(u".jpg"))
{
try
{
// تحميل صورة بديلة.
auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
args->SetData(imageData);
return ResourceLoadingAction::UserProvided;
}
catch (Exception&)
{
return ResourceLoadingAction::Skip;
}
}
else if (args->get_OriginalUri().EndsWith(u".png"))
{
// تعيين عنوان URL بديل.
args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction::Default;
}
// تخطي جميع الصور الأخرى.
return ResourceLoadingAction::Skip;
}
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
تحميل العروض التقديمية دون كائنات ثنائية مدمجة
يمكن أن يحتوي عرض PowerPoint على الأنواع التالية من الكائنات الثنائية المدمجة:
- مشروع VBA (يمكن الوصول إليه عبر IPresentation::get_VbaProject);
- بيانات كائن OLE المدمجة (يمكن الوصول إليها عبر IOleEmbeddedDataInfo::get_EmbeddedFileData);
- بيانات ثنائية للتحكم ActiveX (يمكن الوصول إليها عبر IControl::get_ActiveXControlBinary).
باستخدام الطريقة ILoadOptions::set_DeleteEmbeddedBinaryObjects يمكنك تحميل عرض تقديمي دون أي كائنات ثنائية مدمجة.
هذه الطريقة مفيدة لإزالة المحتويات الثنائية التي قد تكون ضارة. يوضح الكود التالي بلغة C++ كيفية تحميل عرض تقديمي دون أي محتوى ثنائي مدمج:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);
auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);
// تنفيذ عمليات على العرض التقديمي.
presentation->Dispose();
الأسئلة المتكررة
كيف يمكنني معرفة أن الملف معطوب ولا يمكن فتحه؟
ستحصل على استثناء أثناء التحميل يشير إلى فشل تحليل أو تحقق من تنسيق الملف. غالبًا ما تتضمن هذه الأخطاء ذكر بنية ZIP غير صالحة أو سجلات PowerPoint مكسورة.
ماذا يحدث إذا كانت الخطوط المطلوبة مفقودة عند الفتح؟
سيتم فتح الملف، لكن عملية التصوير/التصدير قد تستبدل الخطوط. يمكنك تكوين استبدالات الخطوط أو إضافة الخطوط المطلوبة إلى بيئة التشغيل.
ماذا عن الوسائط المدمجة (فيديو/صوت) عند الفتح؟
تصبح الوسائط متاحة كموارد للعرض. إذا كانت الوسائط مشيرة إلى مسارات خارجية، تأكد من أن تلك المسارات متاحة في بيئتك؛ وإلا قد تقوم عملية التصوير/التصدير بإهمال الوسائط.