ActiveX vezérlők kezelése prezentációkban JavaScript használatával

Bevezetés

Az ActiveX vezérlőket prezentációkban használják. Az Aspose.Slides for Node.js a Java-n keresztül lehetővé teszi az ActiveX vezérlők hozzáadását és kezelését, de ezek kezelése egy kicsit bonyolultabb a szokásos prezentációs alakzatokhoz képest. Implementáltuk a Media Player Active vezérlő hozzáadásának támogatását az Aspose.Slides-ben. Vegye figyelembe, hogy az ActiveX vezérlők nem alakzatok; nem részei a prezentáció ShapeCollection. Ők a különálló ControlCollection részei. Ebben a témában megmutatjuk, hogyan dolgozzunk velük.

Media Player ActiveX vezérlő hozzáadása a diára

Az ActiveX Media Player vezérlő hozzáadásához tegye a következőket:

  1. Hozzon létre egy példányt a Presentation osztályból, és generáljon egy üres prezentációt.
  2. Hozzáférés a cél diához a Presentation osztályban.
  3. Adja hozzá a Media Player ActiveX vezérlőt a ControlCollection által biztosított addControl metódussal.
  4. Hozzáférés a Media Player ActiveX vezérlőhöz, és a tulajdonságai segítségével állítsa be a video útvonalát.
  5. Mentse a prezentációt PPTX fájlként.

Ez a minta kód, a fenti lépések alapján, bemutatja, hogyan adjon Media Player ActiveX vezérlőt egy diára:

// Üres prezentációpéldány létrehozása
var pres = new aspose.slides.Presentation();
try {
    // Media Player ActiveX vezérlő hozzáadása
    pres.getSlides().get_Item(0).getControls().addControl(aspose.slides.ControlType.WindowsMediaPlayer, 100, 100, 400, 400);
    // Media Player ActiveX vezérlő elérése és a videó útvonal beállítása
    pres.getSlides().get_Item(0).getControls().get_Item(0).getProperties().set_Item("java.net.URL", "Wildlife.wmv");
    // Prezentáció mentése
    pres.save("Output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

ActiveX vezérlő módosítása

Egy egyszerű ActiveX vezérlő, például egy szövegdoboz vagy egy egyszerű parancsgomb kezelése egy dián, a következőképpen:

  1. Hozzon létre egy példányt a Presentation osztályból, és töltse be a prezentációt, amelyben ActiveX vezérlők szerepelnek.
  2. Szerezze meg a dia hivatkozását az indexe alapján.
  3. Hozzáférés a dia ActiveX vezérlőihez a ControlCollection elérésével.
  4. A TextBox1 ActiveX vezérlőhöz való hozzáférés a Control objektummal.
  5. Módosítsa a TextBox1 ActiveX vezérlő tulajdonságait, mint a szöveg, betűtípus, betűmagasság és a keret pozíciója.
  6. Hozzáférés a második vezérlőhöz, amely CommandButton1 néven szerepel.
  7. Módosítsa a gomb feliratát, betűtípusát és pozícióját.
  8. Módosítsa az ActiveX vezérlők kereteinek pozícióját.
  9. Írja a módosított prezentációt PPTX fájlba.

Ez a minta kód, a fenti lépések alapján, bemutatja, hogyan kezeljen egy egyszerű ActiveX vezérlőt:

const imageio = java.import("javax.imageio.ImageIO");
// A prezentáció elérése ActiveX vezérlőkkel
var pres = new aspose.slides.Presentation("ActiveX.pptm");
try {
    // Az első dia elérése a prezentációban
    var slide = pres.getSlides().get_Item(0);
    // A TextBox szövegének módosítása
    var control = slide.getControls().get_Item(0);
    if (control.getName().toUpperCase() === "TextBox1".toUpperCase() && (control.getProperties() != null)) {
        var newText = "Changed text";
        control.getProperties().set_Item("Value", newText);
        // A helyettesítő kép módosítása. A PowerPoint lecseréli ezt a képet az ActiveX aktiválása során,
        // ezért néha rendben van, ha a kép változatlan marad.
        var image = java.newInstanceSync("java.awt.image.BufferedImage", control.getFrame().getWidth(), control.getFrame().getHeight(), java.getStaticFieldValue("java.awt.image.BufferedImage", "TYPE_INT_ARGB"));
        var graphics = image.getGraphics();
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "window"));
        graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
        var font = java.newInstanceSync("java.awt.Font", control.getProperties().get_Item("FontName"), java.getStaticFieldValue("java.awt.Font", "PLAIN"), 16);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "windowText"));
        graphics.setFont(font);
        graphics.drawString(newText, 10, 20);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "controlShadow"));
        graphics.drawLine(0, image.getHeight() - 1, 0, 0);
        graphics.drawLine(0, 0, image.getWidth() - 1, 0);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "controlDkShadow"));
        graphics.drawLine(1, image.getHeight() - 2, 1, 1);
        graphics.drawLine(1, 1, image.getWidth() - 2, 1);
        graphics.setColor(java.getStaticFieldValue("java.awt.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(java.getStaticFieldValue("java.awt.SystemColor", "controlLtHighlight"));
        graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
        graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
        graphics.dispose();
        var baos = java.newInstanceSync("java.io.ByteArrayOutputStream");
        imageio.write(image, "PNG", baos);
        var byteStream = Readable.from([Buffer.from(baos.toByteArray())]);
        aspose.slides.readBytesFromStream(byteStream, (imgData) => {
            control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(imgData));
        });
    }
    // A gomb feliratának módosítása
    control = pres.getSlides().get_Item(0).getControls().get_Item(1);
    if (control.getName().toUpperCase() === "CommandButton1".toUpperCase() && (control.getProperties() != null)) {
        var newCaption = "Show MessageBox";
        control.getProperties().set_Item("Caption", newCaption);
        // Changing substitute
        var image = java.newInstanceSync("java.awt.image.BufferedImage", control.getFrame().getWidth(), control.getFrame().getHeight(), java.getStaticFieldValue("java.awt.image.BufferedImage", "TYPE_INT_ARGB"));
        var graphics = image.getGraphics();
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "control"));
        graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
        var font = java.newInstanceSync("java.awt.Font", control.getProperties().get_Item("FontName"), java.getStaticFieldValue("java.awt.Font", "PLAIN"), 16);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "windowText"));
        graphics.setFont(font);
        var metrics = graphics.getFontMetrics(font);
        graphics.drawString(newCaption, java.newFloat((image.getWidth() - metrics.stringWidth(newCaption)) / 2), 20);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "controlLtHighlight"));
        graphics.drawLine(0, image.getHeight() - 1, 0, 0);
        graphics.drawLine(0, 0, image.getWidth() - 1, 0);
        graphics.setColor(java.getStaticFieldValue("java.awt.SystemColor", "controlHighlight"));
        graphics.drawLine(1, image.getHeight() - 2, 1, 1);
        graphics.drawLine(1, 1, image.getWidth() - 2, 1);
        graphics.setColor(java.getStaticFieldValue("java.awt.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(java.getStaticFieldValue("java.awt.SystemColor", "controlDkShadow"));
        graphics.drawLine(0, image.getHeight(), image.getWidth(), image.getHeight());
        graphics.drawLine(image.getWidth(), image.getHeight(), image.getWidth(), 0);
        graphics.dispose();
        
        var baos = java.newInstanceSync("java.io.ByteArrayOutputStream");
        imageio.write(image, "PNG", baos);
        var byteStream = Readable.from([Buffer.from(baos.toByteArray())]);
        aspose.slides.readBytesFromStream(byteStream, (imgData) => {
            control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(imgData));
        });
    }
    // 100 ponttal lefelé mozgatás
    for (let i = 0; i < pres.getSlides().get_Item(0).getControls().size(); i++) {
        let ctl = pres.getSlides().get_Item(0).getControls().get_Item(i);
        var frame = ctl.getFrame();
        ctl.setFrame(new aspose.slides.ShapeFrame(frame.getX(), frame.getY() + 100, frame.getWidth(), frame.getHeight(), java.newByte(frame.getFlipH()), java.newByte(frame.getFlipV()), frame.getRotation()));
    }
    pres.save("withActiveX-edited_java.pptm", aspose.slides.SaveFormat.Pptm);
    // vezérlők eltávolítása
    pres.getSlides().get_Item(0).getControls().clear();
    pres.save("withActiveX-cleared_java.pptm", aspose.slides.SaveFormat.Pptm);
} catch (e) {console.log(e);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

GYIK

Az Aspose.Slides megőrzi az ActiveX vezérlőket olvasás és újbóli mentés során, ha a Python környezetben nem futtathatók?

Igen. Az Aspose.Slides a prezentáció részének tekinti őket, és képes olvasni/módosítani a tulajdonságaikat és kereteiket; a vezérlők tényleges végrehajtása nem szükséges a megőrzésükhöz.

Miben különböznek az ActiveX vezérlők az OLE objektumoktól egy prezentációban?

Az ActiveX vezérlők interaktív, kezelt elemek (gombok, szövegdobozok, médialejátszó), míg az OLE beágyazott alkalmazásobjektusokra utal (például egy Excel munkalap). Ezeket másképp tárolják és kezelik, és különböző tulajdonsági modellel rendelkeznek.

Működnek az ActiveX események és VBA makrók, ha a fájlt az Aspose.Slides módosította?

Az Aspose.Slides megőrzi a meglévő jelölőket és metaadatokat; azonban az események és makrók csak a Windows PowerPoint programon belül futnak, ha a biztonsági beállítások ezt engedélyezik. A könyvtár nem hajt végre VBA-t.