ActiveX

将媒体播放器 ActiveX 控件添加到幻灯片

要添加 ActiveX 媒体播放器控件,请执行以下操作:

  1. 创建 Presentation 类的实例,并生成空白演示文稿实例。
  2. 访问 Presentation 中的目标幻灯片。
  3. 使用 IControlCollection 暴露的 addControl 方法添加媒体播放器 ActiveX 控件。
  4. 访问媒体播放器 ActiveX 控件,并通过其属性设置视频路径。
  5. 将演示文稿保存为 PPTX 文件。

以下示例代码基于上述步骤,演示如何将媒体播放器 ActiveX 控件添加到幻灯片:

// 创建空白演示文稿实例
Presentation pres = new Presentation();
try {
    // 添加媒体播放器 ActiveX 控件
    pres.getSlides().get_Item(0).getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400);

    // 访问媒体播放器 ActiveX 控件并设置视频路径
    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();
}

修改 ActiveX 控件

要管理幻灯片上简单的 ActiveX 控件,如文本框和简单命令按钮,请执行以下操作:

  1. 创建 Presentation 类的实例,并加载其中包含 ActiveX 控件的演示文稿。
  2. 通过索引获取幻灯片引用。
  3. 通过访问 IControlCollection 访问幻灯片中的 ActiveX 控件。
  4. 使用 IControl 对象访问 TextBox1 ActiveX 控件。
  5. 更改 TextBox1 ActiveX 控件的属性,包括文本、字体、字体高度和框架位置。
  6. 访问第二个控件 CommandButton1。
  7. 更改按钮标题、字体和位置。
  8. 移动 ActiveX 控件框架的位置。
  9. 将修改后的演示文稿写入 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 = "更改的文本";
        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 = "显示消息框";
        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();
}