العمل مع OLE الكائنات

OLE (ربط الكائنات وتضمينها) هي تقنية يمكن للمستخدمين من خلالها العمل مع المستندات التي تحتوي على “كائنات” تم إنشاؤها أو تحريرها بواسطة تطبيقات الطرف الثالث. أي أن OLE يسمح لتطبيق التحرير بتصدير هذه “الكائنات” إلى تطبيق تحرير آخر ثم استيرادها بمحتوى إضافي.

في هذه المقالة، سنتحدث عن إدراج كائن OLE وتعيين خصائصه في مستند.

إدراج OLE كائن

إذا كنت تريد OLE كائن، استدعاء طريقة InsertOleObject وتمريرها ProgId صراحة مع غيرها من المعالم.

يوضح مثال التعليمات البرمجية التالية كيفية إدراج كائن OLE في مستند:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->InsertOleObject(u"http://www.aspose.com", u"htmlfile", true, true, nullptr);
doc->Save(ArtifactsDir + u"WorkingWithOleObjectsAndActiveX.InsertOleObject.docx");

تعيين اسم الملف والامتداد عند إدراج OLE كائن

حزمة OLE هي طريقة قديمة و" غير موثقة " لتخزين الكائنات المضمنة إذا كان معالج OLE غير معروف.

كانت الإصدارات المبكرة Windows مثل Windows 3.1 و 95 و 98 تحتوي على حزمة.تطبيق إكس التي يمكن استخدامها لتضمين أي نوع من البيانات في المستند. تم استبعاد هذا التطبيق الآن من Windows، ولكن Microsoft Word والتطبيقات الأخرى لا تزال تستخدمه لتضمين البيانات إذا كان معالج OLE مفقودا أو غير معروف. تتيح فئة OlePackage للمستخدمين الوصول إلى خصائص حزمة OLE.

يوضح مثال التعليمات البرمجية التالية كيفية تعيين اسم الملف والملحق واسم العرض لحزمة OLE:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
ArrayPtr<uint8_t> bs = System::IO::File::ReadAllBytes(MyDir + u"Zip file.zip");
{
SharedPtr<System::IO::Stream> stream = MakeObject<System::IO::MemoryStream>(bs);
SharedPtr<Shape> shape = builder->InsertOleObject(stream, u"Package", true, nullptr);
SharedPtr<OlePackage> olePackage = shape->get_OleFormat()->get_OlePackage();
olePackage->set_FileName(u"filename.zip");
olePackage->set_DisplayName(u"displayname.zip");
doc->Save(ArtifactsDir + u"WorkingWithOleObjectsAndActiveX.InsertOleObjectWithOlePackage.docx");
}

الحصول على OLE كائن البيانات الخام

يمكن للمستخدمين الوصول إلى OLE بيانات الكائن باستخدام خصائص وطرق مختلفة لفئة OleFormat. على سبيل المثال، من الممكن الحصول على البيانات الأولية للكائن OLE أو مسار واسم الملف المصدر للكائن OLE المرتبط.

يوضح مثال التعليمات البرمجية التالية كيفية الحصول على OLE كائن البيانات الخام باستخدام طريقة GetRawData:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto oleShape = System::DynamicCast<Shape>(doc->GetChild(NodeType::Shape, 0, true));
ArrayPtr<uint8_t> oleRawData = oleShape->get_OleFormat()->GetRawData();

إدراج كائن أولي كرمز

OLE يمكن أيضا إدراج الكائنات في المستندات كصور.

يوضح مثال الكود التالي كيفية إدراج كائن OLE كرمز. لهذا الغرض، تعرض فئة DocumentBuilder طريقة InsertOleObjectAsIcon:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->InsertOleObjectAsIcon(MyDir + u"Presentation.pptx", false, ImagesDir + u"Logo icon.ico", u"My embedded file");
doc->Save(ArtifactsDir + u"WorkingWithOleObjectsAndActiveX.InsertOleObjectAsIcon.docx");

يوضح مثال التعليمات البرمجية التالية كيفية إدراج كائن OLE مضمن كرمز من دفق في المستند:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
{
auto stream = MakeObject<System::IO::MemoryStream>(System::IO::File::ReadAllBytes(MyDir + u"Presentation.pptx"));
builder->InsertOleObjectAsIcon(stream, u"Package", ImagesDir + u"Logo icon.ico", u"My embedded file");
}
doc->Save(ArtifactsDir + u"WorkingWithOleObjectsAndActiveX.InsertOleObjectAsIconUsingStream.docx");

إدراج الفيديو على الانترنت

يمكن إدراج الفيديو عبر الإنترنت في مستند ورد من علامة التبويب “Insert” > “Online Video”. يمكنك إدراج مقطع فيديو عبر الإنترنت في مستند في الموقع الحالي عن طريق استدعاء طريقة InsertOnlineVideo.

ال DocumentBuilder تقدم الفئة أربعة أحمال زائدة من هذه الطريقة. أول واحد يعمل مع موارد الفيديو الأكثر شعبية ويأخذ URL من الفيديو كمعلمة. على سبيل المثال، يدعم الحمل الزائد الأول الإدراج البسيط لمقاطع الفيديو عبر الإنترنت من YouTube و فيميو الموارد.

يوضح مثال الكود التالي كيفية إدراج مقطع فيديو عبر الإنترنت من Vimeo في مستند:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->InsertOnlineVideo(u"https://youtu.be/t_1LYZ102RA", 360, 270);
// We can watch the video from Microsoft Word by clicking on the shape.
doc->Save(ArtifactsDir + u"DocumentBuilder.InsertVideoWithUrl.docx");

يعمل الحمل الزائد الثاني مع جميع موارد الفيديو الأخرى ويأخذ رمز HTML مضمن كمعلمة. قد يختلف رمز HTML لتضمين مقطع فيديو اعتمادا على الموفر، لذا اتصل بالموفر المعني للحصول على التفاصيل.

يوضح مثال الكود التالي كيفية إدراج مقطع فيديو عبر الإنترنت في مستند باستخدام رمز HTML هذا:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
String videoUrl = u"https://vimeo.com/52477838";
String videoEmbedCode = String(u"<iframe src=\"https://player.vimeo.com/video/52477838\" width=\"640\" height=\"360\" frameborder=\"0\" ") +
u"title=\"Aspose\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>";
ArrayPtr<uint8_t> thumbnailImageBytes = System::IO::File::ReadAllBytes(ImageDir + u"Logo.jpg");
{
auto stream = MakeObject<System::IO::MemoryStream>(thumbnailImageBytes);
{
SharedPtr<System::Drawing::Image> image = System::Drawing::Image::FromStream(stream);
// Below are two ways of creating a shape with a custom thumbnail, which links to an online video
// that will play when we click on the shape in Microsoft Word.
// 1 - Insert an inline shape at the builder's node insertion cursor:
builder->InsertOnlineVideo(videoUrl, videoEmbedCode, thumbnailImageBytes, image->get_Width(), image->get_Height());
}
}
doc->Save(ArtifactsDir + u"DocumentBuilder.InsertOnlineVideoCustomThumbnail.docx");