ActiveX

Ajouter un contrôle ActiveX Media Player à une diapositive

Pour ajouter un contrôle ActiveX Media Player, procédez comme suit :

  1. Créez une instance de la classe Presentation et générez une instance de présentation vide.
  2. Accédez à la diapositive cible dans Presentation.
  3. Ajoutez le contrôle ActiveX Media Player en utilisant la méthode addControl exposée par IControlCollection.
  4. Accédez au contrôle ActiveX Media Player et définissez le chemin vidéo en utilisant ses propriétés.
  5. Enregistrez la présentation en tant que fichier PPTX.

Ce code exemple, basé sur les étapes ci-dessus, montre comment ajouter un contrôle ActiveX Media Player à une diapositive :

  # Créer une instance de présentation vide
  $pres = new Presentation();
  try {
    # Ajout du contrôle ActiveX Media Player
    $pres->getSlides()->get_Item(0)->getControls()->addControl(ControlType::WindowsMediaPlayer, 100, 100, 400, 400);
    # Accéder au contrôle ActiveX Media Player et définir le chemin vidéo
    $pres->getSlides()->get_Item(0)->getControls()->get_Item(0)->getProperties()->set_Item("URL", "Wildlife.wmv");
    # Enregistrer la présentation
    $pres->save("Output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Modifier un contrôle ActiveX

Pour gérer un contrôle ActiveX simple comme une zone de texte et un bouton de commande simple sur une diapositive, procédez comme suit :

  1. Créez une instance de la classe Presentation et chargez la présentation avec des contrôles ActiveX.
  2. Obtenez une référence de diapositive par son index.
  3. Accédez aux contrôles ActiveX dans la diapositive en accédant à la IControlCollection.
  4. Accédez au contrôle ActiveX TextBox1 en utilisant l’objet IControl.
  5. Changez les propriétés du contrôle ActiveX TextBox1 qui incluent le texte, la police, la hauteur de la police et la position du cadre.
  6. Accédez au deuxième contrôle d’accès appelé CommandButton1.
  7. Changez la légende du bouton, la police et la position.
  8. Déplacez la position des cadres de contrôle ActiveX.
  9. Écrivez la présentation modifiée dans un fichier PPTX.

Ce code exemple, basé sur les étapes ci-dessus, montre comment gérer un contrôle ActiveX simple :

  # Accéder à la présentation avec des contrôles ActiveX
  $pres = new Presentation("ActiveX.pptm");
  try {
    # Accéder à la première diapositive de la présentation
    $slide = $pres->getSlides()->get_Item(0);
    # changer le texte de la TextBox
    $control = $slide->getControls()->get_Item(0);
    if (!java_is_null($control->getName()->equalsIgnoreCase("TextBox1") && $control->getProperties())) {
      $newText = "Texte modifié";
      $control->getProperties()->set_Item("Value", $newText);
      # Changer l'image de substitution. PowerPoint remplacera cette image lors de l'activation de ActiveX,
      # donc parfois il est acceptable de laisser l'image inchangée.
      $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()));
    }
    # Changer la légende du bouton
    $control = $pres->getSlides()->get_Item(0)->getControls()->get_Item(1);
    if (!java_is_null($control->getName()->equalsIgnoreCase("CommandButton1") && $control->getProperties())) {
      $newCaption = "Afficher la boîte de message";
      $control->getProperties()->set_Item("Caption", $newCaption);
      # Changer l'image de substitution
      $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()));
    }
    # déplacement de 100 points vers le bas
    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);
    # suppression des contrôles
    $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();
    }
  }