ActiveX
Contents
[
Hide
]
ActiveXコントロールはプレゼンテーションで使用されます。Aspose.Slides for PHP via Javaを使用すると、ActiveXコントロールを追加および管理できますが、通常のプレゼンテーションの図形と比較すると、管理は少し難しくなります。Aspose.Slidesでは、メディアプレーヤーActiveXコントロールを追加するサポートを実装しました。ActiveXコントロールは図形ではなく、プレゼンテーションのIShapeCollectionの一部ではありません。代わりに、別のIControlCollectionの一部です。このトピックでは、これらのコントロールを操作する方法を示します。
スライドにメディアプレーヤーActiveXコントロールを追加する
ActiveXメディアプレーヤーコントロールを追加するには、次の手順を実行します。
- Presentationクラスのインスタンスを作成し、空のプレゼンテーションインスタンスを生成します。
- Presentationの対象スライドにアクセスします。
- IControlCollectionが公開するaddControlメソッドを使用して、メディアプレーヤーActiveXコントロールを追加します。
- メディアプレーヤーActiveXコントロールにアクセスし、そのプロパティを使用してビデオパスを設定します。
- プレゼンテーションをPPTXファイルとして保存します。
上記の手順に基づくサンプルコードは、スライドにメディアプレーヤーActiveXコントロールを追加する方法を示しています:
# 空のプレゼンテーションインスタンスを作成
$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 (!java_is_null($pres)) {
$pres->dispose();
}
}
ActiveXコントロールの変更
Aspose.Slides for PHP via Java 7.1.0以降のバージョンには、ActiveXコントロールを管理するためのコンポーネントが装備されています。プレゼンテーションにすでに追加されたActiveXコントロールにアクセスし、そのプロパティを通じて変更または削除できます。
スライド上のテキストボックスやシンプルなコマンドボタンのような単純なActiveXコントロールを管理するには、次の手順を実行します。
- Presentationクラスのインスタンスを作成し、ActiveXコントロールを含むプレゼンテーションを読み込みます。
- インデックスを使ってスライドの参照を取得します。
- IControlCollectionにアクセスしてスライド内のActiveXコントロールにアクセスします。
- IControlオブジェクトを使用してTextBox1 ActiveXコントロールにアクセスします。
- テキスト、フォント、フォントの高さ、フレームの位置を含むTextBox1 ActiveXコントロールのプロパティを変更します。
- CommandButton1という名前の2つ目のアクセスコントロールにアクセスします。
- ボタンのキャプション、フォント、位置を変更します。
- ActiveXコントロールのフレームの位置を移動します。
- 変更されたプレゼンテーションをPPTXファイルに書き込みます。
このサンプルコードは、上記の手順に基づいて単純なActiveXコントロールを管理する方法を示しています:
# ActiveXコントロールを含むプレゼンテーションにアクセス
$pres = new Presentation("ActiveX.pptm");
try {
# プレゼンテーションの最初のスライドにアクセス
$slide = $pres->getSlides()->get_Item(0);
# TextBoxのテキストを変更
$control = $slide->getControls()->get_Item(0);
if (!java_is_null($control->getName()->equalsIgnoreCase("TextBox1") && $control->getProperties())) {
$newText = "変更されたテキスト";
$control->getProperties()->set_Item("Value", $newText);
# 代替画像を変更。PowerPointはActiveXのアクティベーション時にこの画像を置き換えます、
# したがって、画像をそのままにしておくことが時には正常です。
$image = new BufferedImage($control->getFrame()->getWidth(), $control->getFrame()->getHeight(), BufferedImage->TYPE_INT_ARGB);
$graphics = $image->getGraphics();
$graphics->setColor(SystemColor->window);
$graphics->fillRect(0, 0, $image->getWidth(), $image->getHeight());
$font = new Font($control->getProperties()->get_Item("FontName"), 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();
$baos = new Java("java.io.ByteArrayOutputStream");
Java("javax.imageio.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 (!java_is_null($control->getName()->equalsIgnoreCase("CommandButton1") && $control->getProperties())) {
$newCaption = "メッセージボックスを表示";
$control->getProperties()->set_Item("Caption", $newCaption);
# 代替を変更
$image = new BufferedImage($control->getFrame()->getWidth(), $control->getFrame()->getHeight(), BufferedImage->TYPE_INT_ARGB);
$graphics = $image->getGraphics();
$graphics->setColor(SystemColor->control);
$graphics->fillRect(0, 0, $image->getWidth(), $image->getHeight());
$font = new Font($control->getProperties()->get_Item("FontName"), Font->PLAIN, 16);
$graphics->setColor(SystemColor->windowText);
$graphics->setFont($font);
$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();
$baos = new Java("java.io.ByteArrayOutputStream");
Java("javax.imageio.ImageIO")->write($image, "PNG", $baos);
$control->getSubstitutePictureFormat()->getPicture()->setImage($pres->getImages()->addImage($baos->toByteArray()));
}
# 100ポイント下に移動
foreach($pres->getSlides()->get_Item(0)->getControls() as $ctl) {
$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 (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}