Управление ActiveX элементами в презентациях на Android
Add a Media Player ActiveX Control to a Slide
Чтобы добавить ActiveX‑элемент Media Player, выполните следующее:
- Создайте экземпляр класса Presentation и получите пустой объект презентации.
- Получите целевой слайд в объекте Presentation.
- Добавьте ActiveX‑элемент Media Player с помощью метода addControl из интерфейса IControlCollection.
- Получите доступ к элементу Media Player ActiveX и задайте путь к видео, используя его свойства.
- Сохраните презентацию в файл формата PPTX.
Этот пример кода, основанный на перечисленных шагах, демонстрирует, как добавить ActiveX‑элемент Media Player на слайд:
// Создать пустой экземпляр презентации
Presentation pres = new Presentation();
try {
// Добавление ActiveX‑элемента Media Player
pres.getSlides().get_Item(0).getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400);
// Получить доступ к ActiveX‑элементу Media Player и задать путь к видео
pres.getSlides().get_Item(0).getControls().get_Item(0).getProperties().set_Item("URL", "Wildlife.wmv");
// Сохранить презентацию
pres.save("Output.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Modify an ActiveX Control
Чтобы управлять простым ActiveX‑элементом, таким как текстовое поле или простая кнопка команды на слайде, выполните следующее:
- Создайте экземпляр класса Presentation и загрузите презентацию, содержащую ActiveX‑элементы.
- Получите ссылку на слайд по его индексу.
- Получите доступ к ActiveX‑элементам на слайде, обратившись к IControlCollection.
- Получите доступ к элементу TextBox1 ActiveX через объект IControl.
- Измените свойства элемента TextBox1 ActiveX, включая текст, шрифт, высоту шрифта и положение кадра.
- Получите второй элемент управления под названием CommandButton1.
- Измените подпись кнопки, шрифт и положение.
- Сместите позиции кадров ActiveX‑элементов.
- Запишите изменённую презентацию в файл формата PPTX.
Этот пример кода, основанный на перечисленных шагах, показывает, как управлять простым ActiveX‑элементом:
// Доступ к презентации с элементами ActiveX
Presentation pres = new Presentation("ActiveX.pptm");
try {
// Доступ к первому слайду в презентации
ISlide slide = pres.getSlides().get_Item(0);
// изменение текста TextBox
IControl control = slide.getControls().get_Item(0);
if (control.getName().equalsIgnoreCase("TextBox1") && control.getProperties() != null) {
String newText = "Changed text";
control.getProperties().set_Item("Value", newText);
// Изменение заменяющего изображения. PowerPoint заменит это изображение при активации ActiveX,
// поэтому иногда можно оставить изображение без изменений.
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.window);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.Font.PLAIN, 16);
graphics.setColor(SystemColor.windowText);
graphics.setFont(font);
graphics.drawString(newText, 10, 20);
graphics.setColor(SystemColor.controlShadow);
graphics.drawLine(0, image.getHeight() - 1, 0, 0);
graphics.drawLine(0, 0, image.getWidth() - 1, 0);
graphics.setColor(SystemColor.controlDkShadow);
graphics.drawLine(1, image.getHeight() - 2, 1, 1);
graphics.drawLine(1, 1, image.getWidth() - 2, 1);
graphics.setColor(SystemColor.controlHighlight);
graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1);
graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1);
graphics.setColor(SystemColor.controlLtHighlight);
graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// Изменение подписи кнопки
control = pres.getSlides().get_Item(0).getControls().get_Item(1);
if (control.getName().equalsIgnoreCase("CommandButton1") && control.getProperties() != null) {
String newCaption = "Show MessageBox";
control.getProperties().set_Item("Caption", newCaption);
// Изменение заменяющего изображения
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.control);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.Font.PLAIN, 16);
graphics.setColor(SystemColor.windowText);
graphics.setFont(font);
FontMetrics metrics = graphics.getFontMetrics(font);
graphics.drawString(newCaption, (image.getWidth() - metrics.stringWidth(newCaption)) / 2, 20);
graphics.setColor(SystemColor.controlLtHighlight);
graphics.drawLine(0, image.getHeight() - 1, 0, 0);
graphics.drawLine(0, 0, image.getWidth() - 1, 0);
graphics.setColor(SystemColor.controlHighlight);
graphics.drawLine(1, image.getHeight() - 2, 1, 1);
graphics.drawLine(1, 1, image.getWidth() - 2, 1);
graphics.setColor(SystemColor.controlShadow);
graphics.drawLine(1, image.getHeight() - 1, image.getWidth() - 1, image.getHeight() - 1);
graphics.drawLine(image.getWidth() - 1, image.getHeight() - 1, image.getWidth() - 1, 1);
graphics.setColor(SystemColor.controlDkShadow);
graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
graphics.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// сдвиг вниз на 100 пунктов
for (IControl ctl : pres.getSlides().get_Item(0).getControls()) {
IShapeFrame frame = ctl.getFrame();
ctl.setFrame(new ShapeFrame(frame.getX(), frame.getY() + 100,
frame.getWidth(), frame.getHeight(), frame.getFlipH(), frame.getFlipV(), frame.getRotation()));
}
pres.save("withActiveX-edited_java.pptm", SaveFormat.Pptm);
// удаление элементов управления
pres.getSlides().get_Item(0).getControls().clear();
pres.save("withActiveX-cleared_java.pptm", SaveFormat.Pptm);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Does Aspose.Slides preserve ActiveX controls when reading and re-saving if they cannot be executed in the Java runtime?
Yes. Aspose.Slides treats them as part of the presentation and can read/modify their properties and frames; executing the controls themselves is not required to preserve them.
How do ActiveX controls differ from OLE objects in a presentation?
ActiveX controls are interactive managed controls (buttons, text boxes, media player), whereas OLE refers to embedded application objects (for example, an Excel worksheet). They are stored and handled differently and have different property models.
Do ActiveX events and VBA macros work if the file has been modified by Aspose.Slides?
Aspose.Slides preserves the existing markup and metadata; however, events and macros run only inside PowerPoint on Windows when security allows it. The library does not execute VBA.