فتح العروض التقديمية في JavaScript

المقدمة

Aspose.Slides for Node.js via Java يمكنه تحميل عروض PowerPoint وOpenDocument من الملفات ومقاطع البيانات. بعد تحميل العرض، يمكنك فحص هيكله، تعديل الشرائح، إدارة الموارد، وحفظه بالتنسيق الأصلي أو أي تنسيق آخر مدعوم.

يمكن تخصيص سلوك التحميل عبر فئة LoadOptions. على سبيل المثال، يمكنك تزويد كلمة مرور الفتح، إبقاء الكائنات الثنائية الكبيرة خارج ذاكرة Node.js، التحكم في الموارد الخارجية، أو حذف البيانات الثنائية المدمجة.

فتح العروض

بعد تحميل ملف أو تدفق، يمكنك تحديد تنسيق العرض الأصلي لاختيار طريقة معالجة تطبيقك له.

لفتح عرض موجود، مرّر مسار ملفه إلى مُنشئ Presentation. حرّر العرض بعد الاستخدام حتى يتم تحرير مقبض الملف والبيانات المؤقتة وغيرها من الموارد بسرعة.

يوضح المثال التالي بلغة JavaScript كيفية فتح عرض والحصول على عدد شرائحه:

const slides = require("aspose.slides.via.java");

const presentation = new slides.Presentation("sample.pptx");
try {
    console.log("Slide count: " + presentation.getSlides().size());
} finally {
    presentation.dispose();
}

فتح العروض المحمية بكلمة مرور

تشفّر كلمة مرور الفتح محتوى العرض. لتحميل العرض بالكامل، مرّر كلمة المرور الصحيحة إلى LoadOptions.setPassword وقدم الخيارات إلى مُنشئ Presentation. سيفشل التحميل إذا كانت كلمة المرور مفقودة أو غير صحيحة.

const slides = require("aspose.slides.via.java");

const loadOptions = new slides.LoadOptions();
loadOptions.setPassword("open_password");

const presentation = new slides.Presentation("encrypted-presentation.pptx", loadOptions);
try {
    console.log("Slide count: " + presentation.getSlides().size());
} finally {
    presentation.dispose();
}

للحصول على معلومات حول اكتشاف كلمة المرور، التحقق، وسير عمل التشفير، راجع Password-Protect Presentations. إذا تم حفظ عرض مشفر مع خصائص مستند عامة، يمكن قراءة تلك الخصائص دون كلمة مرور؛ انظر Manage Presentation Properties.

فتح العروض الكبيرة

LoadOptions.getBlobManagementOptions تُعيد خيارات تتحكم في طريقة معالجة Aspose.Slides للكائنات الثنائية الكبيرة مثل الصور، الصوت والفيديو. يمكنك إبقاء ملف المصدر مقفلًا، السماح بالملفات المؤقتة، وتحديد مقدار بيانات BLOB المُحتفظ بها في الذاكرة.

يعرض الكود التالي بلغة JavaScript كيفية تحميل عرض كبير (مثال، 2 جيجابايت):

const slides = require("aspose.slides.via.java");

const filePath = "large-presentation.pptx";

const loadOptions = new slides.LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(slides.PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setMaxBlobsBytesInMemory(10 * 1024 * 1024);

const presentation = new slides.Presentation(filePath, loadOptions);
try {
    presentation.getSlides().get_Item(0).setName("Large presentation");
    presentation.save("large-presentation-copy.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

التحكم في الموارد الخارجية

LoadOptions.setResourceLoadingCallback يقبل تنفيذًا لـIResourceLoadingCallback. يمكن لواجهة الاستدعاء توفير بيانات بديلة، إعادة توجيه مورد، استخدام المُحمِّل الافتراضي، أو تخطي المورد. هذا مفيد عندما تحتوي العروض على صور خارجية يجب حلها وفقًا لقواعد الأمان أو التخزين الخاصة بالتطبيق.

const slides = require("aspose.slides.via.java");
const fs = require("fs");
const java = require("java");

const imageLoadingHandler = java.newProxy("com.aspose.slides.IResourceLoadingCallback", {
    resourceLoading: function(args) {
        const isJpeg = args.getOriginalUri().toLowerCase().endsWith(".jpg");
        const approvedImagePath = "approved-image.jpg";
        if (!isJpeg || !fs.existsSync(approvedImagePath)) {
            return slides.ResourceLoadingAction.Skip;
        }

        try {
            const imageData = fs.readFileSync(approvedImagePath);
            args.setData(imageData);
            return slides.ResourceLoadingAction.UserProvided;
        } catch (error) {
            console.error("The approved replacement image could not be read.");
            return slides.ResourceLoadingAction.Skip;
        }
    }
});

const loadOptions = new slides.LoadOptions();
loadOptions.setResourceLoadingCallback(imageLoadingHandler);

const presentation = new slides.Presentation("presentation-with-external-images.pptx", loadOptions);
try {
    console.log("Slide count: " + presentation.getSlides().size());
} finally {
    presentation.dispose();
}

تحميل العروض بدون كائنات ثنائية مدمجة

قد يحتوي العرض على بيانات ثنائية مدمجة لا يحتاجها التطبيق أو لا يرغب في الاحتفاظ بها. من الأمثلة:

اضبط LoadOptions.setDeleteEmbeddedBinaryObjects إلى true لإزالة هذه البيانات الثنائية أثناء التحميل. احفظ العرض الذي تم تحميله للحفاظ على النتيجة المنقاة.

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

const slides = require("aspose.slides.via.java");

const loadOptions = new slides.LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);

const presentation = new slides.Presentation("presentation-with-embedded-data.pptx", loadOptions);
try {
    presentation.save("presentation-without-embedded-data.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

الأسئلة المتكررة

كيف يمكنني معرفة أن الملف تالف ولا يمكن فتحه؟

تطرح Aspose.Slides استثناءً يتعلق بالتحليل أو التنسيق أثناء التحميل. تعامل مع هذا الفشل بشكل منفصل عن خطأ كلمة المرور غير الصحيحة حتى يتمكن التطبيق من الإبلاغ عن السبب بدقة.

ماذا يحدث إذا كانت الخطوط المطلوبة مفقودة؟

يمكن للعرض أن يظل يُحمّل، لكن قد تستبدل الخطوط أثناء العرض والتصدير. يمكنك تكوين استبدال الخطوط أو توفير خطوط مخصصة لجعل الناتج أكثر توقعًا.

هل تحميل العرض يقوم أيضًا بتحميل الوسائط المدمجة؟

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