إدارة OLE في العروض التقديمية باستخدام JavaScript
اعتبر مخططًا تم إنشاؤه في MS Excel. ثم يتم وضع المخطط داخل شريحة PowerPoint. يُعتبر ذلك المخطط في Excel كائن OLE.
- قد يظهر كائن OLE كأيقونة. في هذه الحالة، عند النقر المزدوج على الأيقونة، يفتح المخطط في التطبيق المرتبط به (Excel)، أو يُطلب منك اختيار تطبيق لفتح أو تحرير الكائن.
- قد يعرض كائن OLE محتوياته الفعلية، مثل محتوى المخطط. في هذه الحالة، يُفعَّل المخطط في PowerPoint، يتم تحميل واجهة المخطط، ويمكنك تعديل بيانات المخطط داخل PowerPoint.
Aspose.Slides for Node.js via Java يتيح لك إدراج كائنات OLE في الشرائح كإطارات كائن OLE (OleObjectFrame).
إضافة إطارات كائن OLE إلى الشرائح
افترض أنك قد أنشأت مخططًا في Microsoft Excel وتريد إدراجه في شريحة كإطار كائن OLE باستخدام Aspose.Slides for Node.js via Java، يمكنك فعل ذلك بهذه الطريقة:
- إنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرسها.
- قراءة ملف Excel كمصفوفة بايت.
- إضافة OleObjectFrame إلى الشريحة متضمنًا مصفوفة البايت ومعلومات أخرى حول كائن OLE.
- كتابة العرض المعدل كملف PPTX.
في المثال أدناه، أضفنا مخططًا من ملف Excel إلى شريحة كإطار كائن OLE باستخدام Aspose.Slides for Node.js via Java. ملاحظة أن مُنشئ OleEmbeddedDataInfo يأخذ امتداد كائن قابل للإدراج كمعامل ثانٍ. يتيح هذا الامتداد لـ PowerPoint تفسير نوع الملف بشكل صحيح واختيار التطبيق المناسب لفتح كائن OLE هذا.
var presentation = new asposeSlides.Presentation();
var slideSize = presentation.getSlideSize().getSize();
var slide = presentation.getSlides().get_Item(0);
// Prepare data for the OLE object.
var oleStream = fs.readFileSync("book.xlsx");
var fileData = Array.from(oleStream);
var dataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", fileData), "xlsx");
// Add the OLE object frame to the slide.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
إضافة إطارات OLE مرتبطة
Aspose.Slides for Node.js via Java يتيح لك إضافة OleObjectFrame دون إدراج بيانات ولكن فقط برابط إلى الملف.
يعرض هذا الكود JavaScript كيفية إضافة OleObjectFrame بملف Excel مرتبط إلى شريحة:
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
// إضافة إطار كائن OLE مع ملف Excel مرتبط.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
الوصول إلى إطارات OLE
إذا كان كائن OLE مضمّنًا بالفعل في شريحة، يمكنك بسهولة العثور عليه أو الوصول إليه بهذه الطريقة:
- تحميل عرض يحتوي على كائن OLE المضمّن بإنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة باستخدام فهرسها.
- الوصول إلى شكل OleObjectFrame. في مثالنا، استخدمنا PPTX الذي تم إنشاؤه مسبقًا والذي يحتوي على شكل واحد فقط في الشريحة الأولى.
- بمجرد الوصول إلى إطار كائن OLE، يمكنك تنفيذ أي عملية عليه.
في المثال أدناه، يتم الوصول إلى إطار كائن OLE (كائن مخطط Excel مضمّن في شريحة) وبيانات ملفه.
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// احصل على بيانات الملف المضمّن.
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
// احصل على امتداد الملف المضمّن.
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
// ...
}
الوصول إلى خصائص إطار OLE المرتبط
Aspose.Slides يتيح لك الوصول إلى خصائص إطار كائن OLE المرتبط.
يعرض هذا الكود JavaScript كيفية التحقق مما إذا كان كائن OLE مرتبطًا ثم الحصول على مسار الملف المرتبط:
var presentation = new asposeSlides.Presentation("sample.ppt");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
// تحقق مما إذا كان كائن OLE مرتبطًا.
if (oleFrame.isObjectLink()) {
// اطبع المسار الكامل للملف المرتبط.
console.log("OLE object frame is linked to:", oleFrame.getLinkPathLong());
// اطبع المسار النسبي للملف المرتبط إذا كان موجودًا.
// يمكن فقط لعروض PPT أن تحتوي على المسار النسبي.
if (oleFrame.getLinkPathRelative() != null && oleFrame.getLinkPathRelative() != "") {
console.log("OLE object frame relative path:", oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
تغيير بيانات كائن OLE
إذا كان كائن OLE مضمّنًا بالفعل في شريحة، يمكنك بسهولة الوصول إلى ذلك الكائن وتعديل بياناته بهذه الطريقة:
- تحميل عرض يحتوي على كائن OLE المضمّن بإنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة عبر فهرستها.
- الوصول إلى شكل إطار كائن OLE. في مثالنا، استخدمنا PPTX الذي تم إنشاؤه مسبقًا والذي يحتوي على شكل واحد في الشريحة الأولى.
- بمجرد الوصول إلى إطار كائن OLE، يمكنك تنفيذ أي عملية عليه.
- إنشاء كائن
Workbookوالوصول إلى بيانات OLE. - الوصول إلى ورقة العمل
Worksheetالمطلوبة وتعديل البيانات. - حفظ الـ
Workbookالمحدث في تدفق. - تغيير بيانات كائن OLE من التدفق.
في المثال أدناه، تم الوصول إلى إطار كائن OLE (كائن مخطط Excel مضمّن في شريحة) وتم تعديل بيانات ملفه لتحديث بيانات المخطط.
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var shape = slide.getShapes().get_Item(0);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var oleStream = java.newInstanceSync("java.io.ByteArrayInputStream", oleFrame.getEmbeddedData().getEmbeddedFileData());
// قراءة بيانات كائن OLE ككائن Workbook.
var workbook = java.newInstanceSync("Workbook", oleStream);
var newOleStream = java.newInstanceSync("java.io.ByteArrayOutputStream");
// تعديل بيانات المصنف.
workbook.getWorksheets().get(0).getCells().get(0, 4).putValue("E");
workbook.getWorksheets().get(0).getCells().get(1, 4).putValue(12);
workbook.getWorksheets().get(0).getCells().get(2, 4).putValue(14);
workbook.getWorksheets().get(0).getCells().get(3, 4).putValue(15);
var fileOptions = java.newInstanceSync("OoxmlSaveOptions", java.getStaticFieldValue("com.aspose.cells.SaveFormat", "XLSX"));
workbook.save(newOleStream, fileOptions);
// تغيير بيانات إطار كائن OLE.
var newData = new asposeSlides.OleEmbeddedDataInfo(newOleStream.toByteArray(), oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
newOleStream.close();
oleStream.close();
}
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
إدراج أنواع ملفات أخرى في الشرائح
بالإضافة إلى مخططات Excel، يتيح لك Aspose.Slides for Node.js via Java إدراج أنواع أخرى من الملفات في الشرائح. على سبيل المثال، يمكنك إدراج ملفات HTML وPDF وZIP ككائنات. عندما ينقر المستخدم مرتين على الكائن المدخل، يفتح تلقائيًا في البرنامج المناسب، أو يُطلب من المستخدم اختيار برنامج مناسب لفتحه.
يعرض هذا الكود JavaScript كيفية إدراج HTML وZIP في شريحة:
var presentation = new asposeSlides.Presentation();
var slide = presentation.getSlides().get_Item(0);
var htmlBuffer = fs.readFileSync("sample.html");
var htmlData = Array.from(htmlBuffer);
var htmlDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", htmlData), "html");
var htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);
var zipBuffer = fs.readFileSync("sample.zip");
var zipData = Array.from(zipBuffer);
var zipDataInfo = new asposeSlides.OleEmbeddedDataInfo(java.newArray("byte", zipData), "zip");
var zipOleFrame = slide.getShapes().addOleObjectFrame(150, 220, 50, 50, zipDataInfo);
zipOleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
تعيين أنواع الملفات للكائنات المدخلة
عند العمل على العروض التقديمية، قد تحتاج إلى استبدال كائنات OLE القديمة بأخرى جديدة أو استبدال كائن OLE غير مدعوم بآخر مدعوم. يتيح لك Aspose.Slides for Node.js via Java تعيين نوع الملف لكائن مضمّن، مما يمكنك من تحديث بيانات إطار OLE أو امتداده.
يعرض هذا الكود JavaScript كيفية تعيين نوع الملف لكائن OLE مضمّن إلى zip:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var oleFileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
console.log("Current embedded file extension is:", fileExtension);
// Change the file type to ZIP.
var fileData = java.newArray("byte", Array.from(oleFileData));
oleFrame.setEmbeddedData(new asposeSlides.OleEmbeddedDataInfo(fileData, "zip"));
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
تعيين صور الأيقونة والعناوين للكائنات المدخلة
بعد إدراج كائن OLE، تُضاف معاينة مكوّنة من صورة أيقونة تلقائيًا. هذه المعاينة هي ما يراه المستخدمون قبل الوصول إلى كائن OLE أو فتحه. إذا أردت استخدام صورة ونص محددين كعناصر في المعاينة، يمكنك تعيين صورة الأيقونة والعنوان باستخدام Aspose.Slides for Node.js via Java.
يعرض هذا الكود JavaScript كيفية تعيين صورة الأيقونة والعنوان لكائن مضمّن:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
var oleFrame = slide.getShapes().get_Item(0);
// إضافة صورة إلى موارد العرض التقديمي.
var image = asposeSlides.Images.fromFile("image.png");
var oleImage = presentation.getImages().addImage(image);
image.dispose();
// تعيين عنوان والصورة لمعاينة OLE.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", asposeSlides.SaveFormat.Pptx);
presentation.dispose();
منع تعديل حجم وإعادة تموضع إطار OLE
بعد إضافة كائن OLE مرتبط إلى شريحة عرض، عند فتح العرض في PowerPoint قد تظهر رسالة تطلب تحديث الروابط. النقر على زر “Update Links” قد يغير حجم وموقع إطار كائن OLE لأن PowerPoint يحدّث البيانات من كائن OLE المرتبط ويُعيد إنشاء المعاينة. لمنع PowerPoint من طلب تحديث بيانات الكائن، استخدم طريقة setUpdateAutomatic من فئة OleObjectFrame مع القيمة false:
oleFrame.setUpdateAutomatic(false);
استخراج الملفات المدخلة
Aspose.Slides for Node.js via Java يتيح لك استخراج الملفات المدخلة في الشرائح ككائنات OLE بهذه الطريقة:
- إنشاء مثال من الفئة Presentation التي تحتوي على كائنات OLE التي تريد استخراجها.
- التمرّ عبر جميع الأشكال في العرض والوصول إلى أشكال OLEObjectFrame.
- الوصول إلى بيانات الملفات المدخلة من إطارات OLE وكتابة هذه البيانات إلى القرص.
يعرض هذا الكود JavaScript كيفية استخراج الملفات المدخلة في شريحة ككائنات OLE:
var presentation = new asposeSlides.Presentation("sample.pptx");
var slide = presentation.getSlides().get_Item(0);
for (var index = 0; index < slide.getShapes().size(); index++) {
var shape = slide.getShapes().get_Item(index);
if (java.instanceOf(shape, "com.aspose.slides.OleObjectFrame")) {
var oleFrame = shape;
var fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
var fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
var filePath = "OLE_object_" + index + fileExtension;
fs.writeFileSync(filePath, Buffer.from(fileData));
}
}
presentation.dispose();
الأسئلة الشائعة
هل سيُعرض محتوى OLE عند تصدير الشرائح إلى PDF/صور؟
ما هو مرئي على الشريحة هو ما يُعرض—الأيقونة/صورة البديل (المعاينة). محتوى OLE “الحي” لا يُنفّذ أثناء التصدير. إذا لزم الأمر، عيّن صورة معاينة خاصة بك لضمان المظهر المتوقع في ملف PDF المصدر.
كيف يمكنني قفل كائن OLE على شريحة بحيث لا يتمكن المستخدمون من تحريكه/تحريره في PowerPoint؟
قفل الشكل: Aspose.Slides يقدم أقفالًا على مستوى الشكل. هذا ليس تشفيرًا، لكنه يمنع فعليًا التعديلات والحركات غير المقصودة.
هل سيتم الحفاظ على المسارات النسبية لكائنات OLE المرتبطة في تنسيق PPTX؟
في PPTX لا تتوفر معلومات “المسار النسبي”—فقط المسار الكامل. المسارات النسبية موجودة في تنسيق PPT الأقدم. للقدرة على النقل، يفضَّل استخدام مسارات مطلقة موثوقة/عناوين URI قابلة للوصول أو الإدراج.