Trabajar con Objetos OLE

OLE (Vinculación e incrustación de objetos) es una tecnología mediante la cual los usuarios pueden trabajar con documentos que contienen “objetos” creados o editados por aplicaciones de terceros. Es decir, OLE permite que una aplicación de edición exporte estos “objetos” a otra aplicación de edición y luego los importe con contenido adicional.

En este artículo, hablaremos sobre cómo insertar un objeto OLE y establecer sus propiedades en un documento.

Insertar Objeto OLE

Si desea un objeto OLE, llame al método InsertOleObject y pásele el ProgId explícitamente con otros parámetros.

El siguiente ejemplo de código muestra cómo insertar un objeto OLE en un documento:

//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");

Establezca el Nombre y la Extensión del Archivo al Insertar el Objeto OLE

El paquete OLE es una forma heredada e “indocumentada” de almacenar objetos incrustados si se desconoce un controlador OLE.

Versiones tempranas de Windows como Windows 3.1, 95 y 98 tenían un empaquetador.aplicación exe que podría usarse para incrustar cualquier tipo de datos en el documento. Esta aplicación ahora está excluida de Windows, pero Microsoft Word y otras aplicaciones aún la usan para incrustar datos si falta el controlador OLE o se desconoce. La clase OlePackage permite a los usuarios acceder a las propiedades del paquete OLE.

El siguiente ejemplo de código muestra cómo establecer el nombre de archivo, la extensión y el nombre para mostrar del paquete 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");
}

Obtenga Acceso a Datos sin Procesar de Objetos OLE

Los usuarios pueden acceder a los datos de objetos OLE utilizando varias propiedades y métodos de la clase OleFormat. Por ejemplo, es posible obtener los datos sin procesar del objeto OLE o la ruta y el nombre de un archivo de origen para el objeto OLE vinculado.

El siguiente ejemplo de código muestra cómo obtener datos sin procesar del objeto OLE utilizando el método 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();

Insertar objeto Ole como Icono

Los objetos OLE también se pueden insertar en documentos como imágenes.

El siguiente ejemplo de código muestra cómo insertar un objeto OLE como icono. Para este propósito, la clase DocumentBuilder expone el método 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");

El siguiente ejemplo de código muestra cómo insertar un objeto OLE incrustado como icono de una secuencia en el documento:

//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");

Insertar Video en Línea

El video en línea se puede insertar en un documento de Word desde la pestaña “Insert” > “Online Video”. Puede insertar un video en línea en un documento en la ubicación actual llamando al método InsertOnlineVideo.

La clase DocumentBuilder introduce cuatro sobrecargas de este método. El primero funciona con los recursos de video más populares y toma el URL del video como parámetro. Por ejemplo, la primera sobrecarga admite la inserción simple de videos en línea desde YouTube y Vimeo recursos.

El siguiente ejemplo de código muestra cómo insertar un video en línea de Vimeo en un documento:

//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");

La segunda sobrecarga funciona con todos los demás recursos de video y toma el código HTML incrustado como parámetro. El código HTML para incrustar un video puede variar según el proveedor, así que comuníquese con el proveedor respectivo para obtener más detalles.

El siguiente ejemplo de código muestra cómo insertar un video en línea en un documento utilizando dicho código 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");