Работа с 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.
В следующем примере кода показано, как задать имя файла, расширение и отображаемое имя для 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-объекты также можно вставлять в документы в виде изображений.
В следующем примере кода показано, как вставить 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
видео в качестве параметра. Например, первая перегрузка поддерживает простую вставку онлайн-видео из ютуб и Вимео ресурсы.
В следующем примере кода показано, как вставить онлайн-видео из 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"); |