Διαχείριση ελέγχων ActiveX σε παρουσιάσεις χρησιμοποιώντας PHP
Introduction
Οι έλεγχοι ActiveX χρησιμοποιούνται σε παρουσιάσεις. Το Aspose.Slides για PHP μέσω Java σάς επιτρέπει να προσθέτετε και να διαχειρίζεστε ελέγχους ActiveX, αλλά είναι λίγο πιο δύσκολο να τους διαχειριστείτε σε σύγκριση με τα κανονικά σχήματα παρουσίασης. Έχουμε υλοποιήσει υποστήριξη για την προσθήκη ελέγχου Media Player Active στο Aspose.Slides. Σημειώστε ότι οι έλεγχοι ActiveX δεν είναι σχήματα· δεν αποτελούν μέρος του ShapeCollection. Αντί αυτού, αποτελούν μέρος του ξεχωριστού ControlCollection . Σε αυτό το θέμα, θα σας δείξουμε πώς να εργάζεστε με αυτούς.
Add a Media Player ActiveX Control to a Slide
Για να προσθέσετε έναν έλεγχο Media Player ActiveX, κάντε το εξής:
- Δημιουργήστε μια παρουσία της κλάσης Presentation και δημιουργήστε μια κενή παρουσίαση.
- Προσπελάστε τη διαφάνεια‑στόχο στην Presentation.
- Προσθέστε τον έλεγχο Media Player ActiveX χρησιμοποιώντας τη μέθοδο addControl που εκτίθεται από το ControlCollection.
- Προσπελάστε τον έλεγχο Media Player ActiveX και ορίστε τη διαδρομή βίντεο χρησιμοποιώντας τις ιδιότητές του.
- Αποθηκεύστε την παρουσίαση ως αρχείο PPTX.
Αυτό το δείγμα κώδικα, με βάση τα παραπάνω βήματα, δείχνει πώς να προσθέσετε τον έλεγχο Media Player ActiveX σε μια διαφάνεια:
# Δημιουργία κενής παρουσίασης
$pres = new Presentation();
try {
# Προσθήκη του ελέγχου Media Player ActiveX
$pres->getSlides()->get_Item(0)->getControls()->addControl(ControlType::WindowsMediaPlayer, 100, 100, 400, 400);
# Πρόσβαση στον έλεγχο Media Player 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();
}
}
Modify an ActiveX Control
Για να διαχειριστείτε έναν απλό έλεγχο ActiveX, όπως ένα πλαίσιο κειμένου και ένα απλό κουμπί εντολής σε μια διαφάνεια, κάντε το εξής:
- Δημιουργήστε μια παρουσία της κλάσης Presentation και φορτώστε την παρουσίαση που περιέχει ελέγχους ActiveX.
- Αποκτήστε μια αναφορά διαφάνειας βάσει του δείκτη της.
- Προσπελάστε τους ελέγχους ActiveX στη διαφάνεια προσπελάζοντας το ControlCollection.
- Προσπελάστε τον έλεγχο ActiveX TextBox1 χρησιμοποιώντας το αντικείμενο Control.
- Αλλάξτε τις ιδιότητες του ελέγχου ActiveX TextBox1 που περιλαμβάνουν το κείμενο, τη γραμματοσειρά, το ύψος γραμματοσειράς και τη θέση του πλαισίου.
- Προσπελάστε τον δεύτερο έλεγχο που ονομάζεται CommandButton1.
- Αλλάξτε τη λεζάντα του κουμπιού, τη γραμματοσειρά και τη θέση.
- Μετακινήστε τη θέση των πλαισίων των ελέγχων 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 = "Changed text";
$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 = "Show MessageBox";
$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();
}
}
FAQ
Διατηρεί το Aspose.Slides τους ελέγχους ActiveX κατά την ανάγνωση και επαναποθήκευση εάν δεν μπορούν να εκτελεστούν στο περιβάλλον χρόνου εκτέλεσης της Java;
Ναι. Το Aspose.Slides τους αντιμετωπίζει ως μέρος της παρουσίασης και μπορεί να διαβάσει/τροποποιήσει τις ιδιότητές τους και τα πλαίσια· δεν απαιτείται η εκτέλεση των ελέγχων για να διατηρηθούν.
Πώς διαφέρουν οι έλεγχοι ActiveX από τα αντικείμενα OLE σε μια παρουσίαση;
Οι έλεγχοι ActiveX είναι διαδραστικά διαχειριζόμενα στοιχεία (πλήκτρα, πλαίσια κειμένου, media player), ενώ το OLE αφορά ενσωματωμένα αντικείμενα εφαρμογών (π.χ., ένα φύλλο εργασίας Excel). Αποθηκεύονται και διαχειρίζονται διαφορετικά και έχουν διαφορετικά μοντέλα ιδιοτήτων.
Λειτουργούν τα γεγονότα ActiveX και οι μακροεντολές VBA εάν το αρχείο έχει τροποποιηθεί από το Aspose.Slides;
Το Aspose.Slides διατηρεί την υπάρχουσα σήμανση και τα μεταδεδομένα· ωστόσο, τα γεγονότα και οι μακροεντολές εκτελούνται μόνο μέσα στο PowerPoint στα Windows όταν η ασφάλεια το επιτρέπει. Η βιβλιοθήκη δεν εκτελεί VBA.