PHP ile Sunumlarda ActiveX Denetimlerini Yönetme

Giriş

ActiveX denetimleri sunumlarda kullanılır. Aspose.Slides for PHP via Java, ActiveX denetimlerini eklemenize ve yönetmenize olanak tanır, ancak bunlar normal sunum şekilleriyle karşılaştırıldığında yönetimi biraz daha zordur. Aspose.Slides içinde Media Player Active kontrolünün eklenmesi için destek sağladık. ActiveX denetimlerinin şekil olmadığını, sunumun ShapeCollection içinde yer almadığını unutmayın. Bunun yerine ayrı bir ControlCollection içindedirler. Bu konuda, onlarla nasıl çalışılacağını göstereceğiz.

Bir Slayta Media Player ActiveX Denetimi Eklemek

Bir ActiveX Media Player denetimi eklemek için aşağıdakileri yapın:

  1. Presentation sınıfının bir örneğini oluşturun ve boş bir sunum örneği oluşturun.
  2. Presentation içinde hedef slayta erişin.
  3. Media Player ActiveX denetimini, ControlCollection tarafından sunulan addControl yöntemini kullanarak ekleyin.
  4. Media Player ActiveX denetimine erişin ve özelliklerini kullanarak video yolunu ayarlayın.
  5. Sunumu PPTX dosyası olarak kaydedin.

Bu örnek kod, yukarıdaki adımlara dayanarak, bir slayta Media Player ActiveX Denetimi eklemeyi gösterir:

  # Boş sunum örneği oluştur
  $pres = new Presentation();
  try {
    # Media Player ActiveX denetimini ekleme
    $pres->getSlides()->get_Item(0)->getControls()->addControl(ControlType::WindowsMediaPlayer, 100, 100, 400, 400);
    # Media Player ActiveX denetimine eriş ve video yolunu ayarla
    $pres->getSlides()->get_Item(0)->getControls()->get_Item(0)->getProperties()->set_Item("URL", "Wildlife.wmv");
    # Sunumu kaydet
    $pres->save("Output.pptx", SaveFormat::Pptx);
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

ActiveX Denetimini Değiştirmek

Bir slaytta metin kutusu ve basit bir komut düğmesi gibi basit bir ActiveX denetimini yönetmek için aşağıdakileri yapın:

  1. Presentation sınıfının bir örneğini oluşturun ve içinde ActiveX denetimleri bulunan sunumu yükleyin.
  2. İndeksine göre bir slayt referansı alın.
  3. Slayttaki ActiveX denetimlerine, ControlCollection erişerek ulaşın.
  4. Control nesnesini kullanarak TextBox1 ActiveX denetimine erişin.
  5. TextBox1 ActiveX denetiminin metin, yazı tipi, yazı tipi yüksekliği ve çerçeve konumu gibi özelliklerini değiştirin.
  6. CommandButton1 adlı ikinci denetime erişin.
  7. Düğmenin başlığını, yazı tipini ve konumunu değiştirin.
  8. ActiveX denetimlerinin çerçeve konumlarını kaydırın.
  9. Değiştirilmiş sunumu bir PPTX dosyasına yazın.

Bu örnek kod, yukarıdaki adımlara dayanarak, basit bir ActiveX denetimini nasıl yöneteceğinizi gösterir:

  # ActiveX denetimleri ile sunuma erişme
  $pres = new Presentation("ActiveX.pptm");
  try {
    # Sunumdaki ilk slayta erişme
    $slide = $pres->getSlides()->get_Item(0);
    # TextBox metnini değiştirme
    $control = $slide->getControls()->get_Item(0);
    if (!java_is_null($control->getName()->equalsIgnoreCase("TextBox1") && $control->getProperties())) {
      $newText = "Changed text";
      $control->getProperties()->set_Item("Value", $newText);
      # Yerine koyma resmini değiştiriyor. PowerPoint bu resmi ActiveX etkinleştirilirken değiştirecek,
      # bu yüzden bazen resmi değiştirmeden bırakmak OK'dur.
      $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()));
    }
    # Düğme başlığını değiştiriyor
    $control = $pres->getSlides()->get_Item(0)->getControls()->get_Item(1);
    if (!java_is_null($control->getName()->equalsIgnoreCase("CommandButton1") && $control->getProperties())) {
      $newCaption = "Show MessageBox";
      $control->getProperties()->set_Item("Caption", $newCaption);
      # Yerine koyma resmini değiştir
      $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 puan aşağı kaydırma
    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);
    # denetimleri kaldırma
    $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();
    }
  }

SSS

Aspose.Slides, Java çalışma zamanında çalıştırılamadığında ActiveX denetimlerini okurken ve yeniden kaydederken korur mu?
Evet. Aspose.Slides, bunları sunumun bir parçası olarak kabul eder ve özelliklerini ve çerçevelerini okuyabilir/değiştirebilir; denetimlerin kendilerini çalıştırmak, onları korumak için gerekli değildir.

ActiveX denetimleri, bir sunumdaki OLE nesnelerinden nasıl farklıdır?
ActiveX denetimleri, etkileşimli yönetilen denetimlerdir (düğmeler, metin kutuları, medya oynatıcı), oysa OLE gömülü uygulama nesnelerini (örneğin bir Excel çalışma sayfası) ifade eder. Bunlar farklı şekilde depolanır ve işlenir ve farklı özellik modellerine sahiptir.

Aspose.Slides tarafından dosya değiştirilmişse ActiveX olayları ve VBA makroları çalışır mı?
Aspose.Slides mevcut işaretlemeyi ve meta verileri korur; ancak olaylar ve makrolar, güvenlik izin verdiğinde yalnızca Windows üzerindeki PowerPoint içinde çalışır. Kütüphane VBA’yı çalıştırmaz.