إدارة OLE في العروض التقديمية على Android
تخيل وجود مخطط تم إنشاؤه في MS Excel. ثم يتم وضع هذا المخطط داخل شريحة PowerPoint. يُعتبر هذا المخطط في Excel ككائن OLE.
- قد يظهر كائن OLE كأيقونة. في هذه الحالة، عند النقر المزدوج على الأيقونة، يفتح المخطط في التطبيق المرتبط (Excel)، أو يطلب منك اختيار تطبيق لفتح أو تحرير الكائن.
- قد يعرض كائن OLE محتوياته الفعلية، مثل محتوى المخطط. في هذه الحالة، يُفعَّل المخطط في PowerPoint، يتم تحميل واجهة المخطط، ويمكنك تعديل بيانات المخطط داخل PowerPoint.
Aspose.Slides for Android via Java يتيح لك إدراج كائنات OLE في الشرائح كإطارات كائن OLE (OleObjectFrame).
إضافة إطارات OLE إلى الشرائح
بافتراض أنك قد أنشأت مخططًا في Microsoft Excel وتريد إدراجه في شريحة كإطار كائن OLE باستخدام Aspose.Slides for Android via Java، يمكنك القيام بذلك بهذه الطريقة:
- إنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة عبر الفهرس الخاص بها.
- قراءة ملف Excel كمصفوفة بايت.
- إضافة OleObjectFrame إلى الشريحة مع مصفوفة البايت ومعلومات أخرى حول كائن OLE.
- كتابة العرض المعدَّل كملف PPTX.
في المثال أدناه، أضفنا مخططًا من ملف Excel إلى شريحة كإطار كائن OLE باستخدام Aspose.Slides for Android via Java.
ملاحظة أن المنشئ OleEmbeddedDataInfo يأخذ امتداد الكائن القابل للإدراج كمعامل ثانٍ. يسمح هذا الامتداد لبرنامج PowerPoint بتفسير نوع الملف بشكل صحيح واختيار التطبيق المناسب لفتح كائن OLE هذا.
Presentation presentation = new Presentation();
SizeF slideSize = presentation.getSlideSize().getSize();
ISlide slide = presentation.getSlides().get_Item(0);
// إعداد البيانات لكائن OLE.
File file = new File("book.xlsx");
byte fileData[] = new byte[(int) file.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
DataInputStream dis = new DataInputStream(bis);
dis.readFully(fileData);
IOleEmbeddedDataInfo dataInfo = new OleEmbeddedDataInfo(fileData, "xlsx");
// Add the OLE object frame to the slide.
slide.getShapes().addOleObjectFrame(0, 0, slideSize.getWidth(), slideSize.getHeight(), dataInfo);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
إضافة إطارات OLE مرتبطة
Aspose.Slides for Android via Java يتيح لك إضافة OleObjectFrame دون إدراج البيانات ولكن مع رابط إلى الملف فقط.
يعرض هذا الشيفرة Java طريقة إضافة OleObjectFrame بملف Excel مرتبط إلى الشريحة:
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
// إضافة إطار كائن OLE مع ملف Excel مرتبط.
slide.getShapes().addOleObjectFrame(20, 20, 200, 150, "Excel.Sheet.12", "book.xlsx");
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
الوصول إلى إطارات OLE
إذا كان كائن OLE مضمّنًا بالفعل في شريحة، يمكنك العثور عليه أو الوصول إليه بسهولة بهذه الطريقة:
- تحميل عرض يحتوي على كائن OLE المدمج بإنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة باستخدام الفهرس الخاص بها.
- الوصول إلى شكل OleObjectFrame. في مثالنا، استخدمنا ملف PPTX الذي تم إنشاؤه مسبقًا ويحتوي على شكل واحد فقط في الشريحة الأولى. ثم قمنا بتحويل هذا الكائن إلى IOleObjectFrame المطلوب.
- بمجرد الوصول إلى إطار كائن OLE، يمكنك تنفيذ أي عملية عليه.
في المثال أدناه، تم الوصول إلى إطار كائن OLE (كائن مخطط Excel مدمج في شريحة) وبيانات ملفه.
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
// احصل على بيانات الملف المضمّن.
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
// احصل على امتداد الملف المضمّن.
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
// ...
}
الوصول إلى خصائص إطار OLE المرتبط
Aspose.Slides يتيح لك الوصول إلى خصائص إطار OLE المرتبط.
يعرض هذا الشيفرة Java طريقة التحقق مما إذا كان كائن OLE مرتبطًا ثم الحصول على مسار الملف المرتبط:
Presentation presentation = new Presentation("sample.ppt");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
// التحقق ما إذا كان كائن OLE مرتبطًا.
if (oleFrame.isObjectLink()) {
// طباعة المسار الكامل للملف المرتبط.
System.out.println("OLE object frame is linked to: " + oleFrame.getLinkPathLong());
// طباعة المسار النسبي للملف المرتبط إذا كان موجودًا.
// يمكن لعروض PPT فقط أن تحتوي على المسار النسبي.
if (oleFrame.getLinkPathRelative() != null && !oleFrame.getLinkPathRelative().isEmpty()) {
System.out.println("OLE object frame relative path: " + oleFrame.getLinkPathRelative());
}
}
}
presentation.dispose();
تغيير بيانات كائن OLE
إذا كان كائن OLE مضمّنًا بالفعل في شريحة، يمكنك الوصول إلى ذلك الكائن وتعديل بياناته بهذه الطريقة:
- تحميل عرض يحتوي على كائن OLE المدمج بإنشاء مثال من الفئة Presentation.
- الحصول على مرجع الشريحة عبر الفهرس الخاص بها.
- الوصول إلى شكل إطار كائن OLE. في مثالنا، استخدمنا ملف PPTX الذي تم إنشاؤه مسبقًا ويحتوي على شكل واحد في الشريحة الأولى. ثم قمنا بتحويل هذا الكائن إلى IOleObjectFrame المطلوب.
- بمجرد الوصول إلى إطار كائن OLE، يمكنك تنفيذ أي عملية عليه.
- إنشاء كائن
Workbookوالوصول إلى بيانات OLE. - الوصول إلى
Worksheetالمطلوب وتعديل البيانات. - حفظ الـ
Workbookالمحدث في تدفق. - تغيير بيانات كائن OLE من التدفق.
في المثال أدناه، تم الوصول إلى إطار كائن OLE (كائن مخطط Excel مدمج في شريحة) وتم تعديل بيانات ملفه لتحديث بيانات المخطط.
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IShape shape = slide.getShapes().get_Item(0);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
ByteArrayInputStream oleStream = new ByteArrayInputStream(oleFrame.getEmbeddedData().getEmbeddedFileData());
// قراءة بيانات كائن OLE ككائن Workbook.
Workbook workbook = new Workbook(oleStream);
ByteArrayOutputStream newOleStream = new 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);
OoxmlSaveOptions fileOptions = new OoxmlSaveOptions(com.aspose.cells.SaveFormat.XLSX);
workbook.save(newOleStream, fileOptions);
// تغيير بيانات إطار كائن OLE.
IOleEmbeddedDataInfo newData = new OleEmbeddedDataInfo(newOleStream.toByteArray(), oleFrame.getEmbeddedData().getEmbeddedFileExtension());
oleFrame.setEmbeddedData(newData);
}
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
إدراج أنواع ملفات أخرى في الشرائح
إلى جانب مخططات Excel، Aspose.Slides for Android via Java يتيح لك إدراج أنواع ملفات أخرى في الشرائح. على سبيل المثال، يمكنك إدراج ملفات HTML وPDF وZIP ككائنات. عندما ينقر المستخدم مزدوجًا على الكائن المدخل، يفتح تلقائيًا في البرنامج المناسب، أو يُطلب من المستخدم اختيار برنامج مناسب لفتحه.
يعرض هذا الشيفرة Java طريقة إدراج HTML وZIP في شريحة:
Presentation presentation = new Presentation();
ISlide slide = presentation.getSlides().get_Item(0);
File fileHtml = new File("sample.html");
byte htmlData[] = new byte[(int) fileHtml.length()];
BufferedInputStream bisHtml = new BufferedInputStream(new FileInputStream(fileHtml));
DataInputStream disHtml = new DataInputStream(bisHtml);
disHtml.readFully(htmlData);
IOleEmbeddedDataInfo htmlDataInfo = new OleEmbeddedDataInfo(htmlData, "html");
IOleObjectFrame htmlOleFrame = slide.getShapes().addOleObjectFrame(150, 120, 50, 50, htmlDataInfo);
htmlOleFrame.setObjectIcon(true);
File fileZip = new File("sample.zip");
byte zipData[] = new byte[(int) fileZip.length()];
BufferedInputStream bisZip = new BufferedInputStream(new FileInputStream(fileZip));
DataInputStream disZip = new DataInputStream(bisZip);
disZip.readFully(zipData);
IOleEmbeddedDataInfo zipDataInfo = new OleEmbeddedDataInfo(zipData, "zip");
IOleObjectFrame zipOleFrame = slide.getShapes().addOleObjectFrame(150, 220, 50, 50, zipDataInfo);
zipOleFrame.setObjectIcon(true);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
تعيين أنواع الملفات للكائنات المدمجة
عند العمل على عروض تقديمية، قد تحتاج إلى استبدال كائنات OLE القديمة بأخرى جديدة أو استبدال كائن OLE غير مدعوم بآخر مدعوم. Aspose.Slides for Android via Java يتيح لك تعيين نوع الملف لكائن مدمج، مما يمكنك من تحديث بيانات إطار OLE أو امتداده.
يعرض هذا الشيفرة Java طريقة تعيين نوع الملف لكائن OLE مدمج إلى zip:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IOleObjectFrame oleFrame = (IOleObjectFrame) slide.getShapes().get_Item(0);
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
System.out.println("Current embedded file extension is: " + fileExtension);
// تغيير نوع الملف إلى ZIP.
oleFrame.setEmbeddedData(new OleEmbeddedDataInfo(fileData, "zip"));
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
تعيين صور الأيقونة والعناوين للكائنات المدمجة
بعد إدراج كائن OLE، يتم إضافة معاينة تتكوّن من صورة أيقونة تلقائيًا. هذه المعاينة هي ما يراه المستخدمون قبل الوصول إلى كائن OLE أو فتحه. إذا أردت استخدام صورة ونص محددين كعناصر في المعاينة، يمكنك تعيين صورة الأيقونة والعنوان باستخدام Aspose.Slides for Android via Java.
يعرض هذا الشيفرة Java طريقة تعيين صورة الأيقونة والعنوان لكائن مدمج:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
IOleObjectFrame oleFrame = (IOleObjectFrame) slide.getShapes().get_Item(0);
// إضافة صورة إلى موارد العرض التقديمي.
File file = new File("image.png");
byte imageData[] = new byte[(int) file.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
DataInputStream dis = new DataInputStream(bis);
dis.readFully(imageData);
IPPImage oleImage = presentation.getImages().addImage(imageData);
// تعيين عنوان وصورة لمعاينة OLE.
oleFrame.setSubstitutePictureTitle("My title");
oleFrame.getSubstitutePictureFormat().getPicture().setImage(oleImage);
oleFrame.setObjectIcon(true);
presentation.save("output.pptx", SaveFormat.Pptx);
presentation.dispose();
منع إطار OLE من تغيير حجمه وإعادة وضعه
بعد إضافة كائن OLE مرتبط إلى شريحة عرض، قد ترى رسالة تطلب تحديث الروابط عند فتح العرض في PowerPoint. النقر على زر “تحديث الروابط” قد يغيّر حجم وإمكان إطار OLE لأن PowerPoint يقوم بتحديث البيانات من كائن OLE المرتبط ويعيد تحميل المعاينة. لمنع PowerPoint من مطالبتك بتحديث بيانات الكائن، عيّن الخاصية setUpdateAutomatic في واجهة IOleObjectFrame إلى false:
oleFrame.setUpdateAutomatic(false);
استخراج الملفات المدمجة
Aspose.Slides for Android via Java يتيح لك استخراج الملفات المدمجة في الشرائح ككائنات OLE بهذه الطريقة:
- إنشاء مثال من فئة Presentation التي تحتوي على كائنات OLE التي ترغب في استخراجها.
- التمرّ عبر جميع الأشكال في العرض والوصول إلى أشكال OLEObjectFrame.
- استخراج بيانات الملفات المدمجة من إطارات OLE وكتابتها إلى القرص.
يعرض هذا الشيفرة Java طريقة استخراج الملفات المدمجة في شريحة ككائنات OLE:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
for (int index = 0; index < slide.getShapes().size(); index++) {
IShape shape = slide.getShapes().get_Item(index);
if (shape instanceof IOleObjectFrame) {
IOleObjectFrame oleFrame = (IOleObjectFrame) shape;
byte[] fileData = oleFrame.getEmbeddedData().getEmbeddedFileData();
String fileExtension = oleFrame.getEmbeddedData().getEmbeddedFileExtension();
FileOutputStream fos = new FileOutputStream(new File("OLE_object_" + index + fileExtension));
fos.write(fileData);
fos.close();
}
}
presentation.dispose();
الأسئلة الشائعة
هل سيتم عرض محتوى OLE عند تصدير الشرائح إلى PDF/صور؟
ما يُعرض على الشريحة هو المعاينة (الأيقونة/الصورة البديلة). لا يتم تنفيذ محتوى OLE “الحي” أثناء عملية التصيير. إذا لزم الأمر، عيّن صورة معاينة مخصصة لضمان المظهر المتوقع في ملف PDF المُصدَّر.
كيف يمكنني قفل كائن OLE على شريحة بحيث لا يتمكن المستخدمون من تحريكه/تحريره في PowerPoint؟
قفل الشكل: Aspose.Slides يوفر قفل على مستوى الشكل. ليس تشفيرًا، لكنه يمنع التعديلات غير المقصودة والتحريك.
لماذا “يقفز” كائن Excel المرتبط أو يغيّر حجمه عندما أفتح العرض؟
قد يقوم PowerPoint بتحديث معاينة كائن OLE المرتبط. للحصول على مظهر ثابت، اتبع ممارسات الحل العملي لضبط حجم الورقة—إما ضبط الإطار على النطاق، أو تحجيم النطاق إلى إطار ثابت وتعيين صورة بديلة مناسبة.
هل سيتم الحفاظ على المسارات النسبية لكائنات OLE المرتبطة في تنسيق PPTX؟
في PPTX لا تتوافر معلومات “المسار النسبي”—فقط المسار الكامل. المسارات النسبية موجودة في تنسيق PPT القديم. للحصول على قابلية نقل أعلى، يفضَّل استخدام مسارات مطلقة موثوقة/URI يمكن الوصول إليها أو الإدراج.