Работа с 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 имаха приложение Packager.exe, което можеше да се използва за вграждане на всякакъв вид данни в документа. Това приложение вече е изключено от Windows, но Microsoft Word и други приложения все още го използват за вграждане на данни, ако манипулаторът OLE липсва или е неизвестен. Клас OlePackage
позволява на потребителите достъп до OLE Package свойства.
Следващият пример за код показва как да зададете името на файла, разширението и показваното име за OLE Package:
//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 обекти също могат да бъдат вмъквани в документи като изображения.
Следващият пример за код показва как да вмъкнете 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"); |
Вмъкване На Онлайн Видео
Онлайн видеото може да бъде вмъкнато в документа Word от раздела “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"); |