Работа с 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-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.insertOleObject("http://www.aspose.com", "htmlfile", true, true, null); | |
doc.save(getArtifactsDir() + "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-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
byte[] bs = FileUtils.readFileToByteArray(new File(getMyDir() + "Zip file.zip")); | |
try (ByteArrayInputStream stream = new ByteArrayInputStream(bs)) | |
{ | |
Shape shape = builder.insertOleObject(stream, "Package", true, null); | |
OlePackage olePackage = shape.getOleFormat().getOlePackage(); | |
olePackage.setFileName("filename.zip"); | |
olePackage.setDisplayName("displayname.zip"); | |
doc.save(getArtifactsDir() + "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-Java | |
Shape oleShape = (Shape) doc.getChild(NodeType.SHAPE, 0, true); | |
byte[] oleRawData = oleShape.getOleFormat().getRawData(); |
Вставить объект OLE в качестве значка
OLE объекты также могут быть вставлены в документы в виде изображений.
В следующем примере кода показано, как вставить объект OLE в качестве значка. Для этой цели класс DocumentBuilder предоставляет метод InsertOleObjectAsIcon.
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.insertOleObjectAsIcon(getMyDir() + "Presentation.pptx", false, getImagesDir() + "Logo icon.ico", | |
"My embedded file"); | |
doc.save(getArtifactsDir() + "WorkingWithOleObjectsAndActiveX.InsertOleObjectAsIcon.docx"); |
В следующем примере кода показано, как вставить внедренный объект OLE в качестве значка из потока в документ:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
try(ByteArrayInputStream stream = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(getMyDir() + "Presentation.pptx")))) | |
{ | |
builder.insertOleObjectAsIcon(stream, "Package", getImagesDir() + "Logo icon.ico", "My embedded file"); | |
} | |
doc.save(getArtifactsDir() + "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-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.insertOnlineVideo("https://youtu.be/t_1LYZ102RA", 360.0, 270.0); | |
// We can watch the video from Microsoft Word by clicking on the shape. | |
doc.save(getArtifactsDir() + "DocumentBuilder.InsertVideoWithUrl.docx"); |
Вторая перегрузка работает со всеми другими видеоресурсами и использует встроенный код HTML в качестве параметра. Код HTML для встраивания видео может отличаться в зависимости от поставщика, поэтому обратитесь к соответствующему поставщику за подробностями.
В следующем примере кода показано, как вставить онлайн-видео в документ, используя такой код HTML:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
String videoUrl = "https://vimeo.com/52477838"; | |
String videoEmbedCode = "<iframe src=\"https://player.vimeo.com/video/52477838\" width=\"640\" height=\"360\" frameborder=\"0\" " + | |
"title=\"Aspose\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"; | |
byte[] thumbnailImageBytes = IOUtils.toByteArray(getAsposelogoUri().toURL().openStream()); | |
BufferedImage image = ImageIO.read(new ByteArrayInputStream(thumbnailImageBytes)); | |
// 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.getWidth(), image.getHeight()); | |
doc.save(getArtifactsDir() + "DocumentBuilder.InsertOnlineVideoCustomThumbnail.docx"); |