Správa ActiveX ovládacích prvků v prezentacích pomocí JavaScriptu
Úvod
ActiveX ovládací prvky se používají v prezentacích. Aspose.Slides pro Node.js přes Java vám umožňuje přidávat a spravovat ActiveX ovládací prvky, ale jsou o něco obtížnější na správu ve srovnání s běžnými tvary v prezentaci. Implementovali jsme podporu pro přidání aktivního ovládacího prvku Media Player v Aspose.Slides. Všimněte si, že ActiveX ovládací prvky nejsou tvary; nejsou součástí prezentace ShapeCollection. Jsou součástí samostatného ControlCollection místo toho. V tomto tématu vám ukážeme, jak s nimi pracovat.
Přidání ActiveX ovládacího prvku Media Player na snímek
Chcete-li přidat ovládací prvek ActiveX Media Player, proveďte následující:
- Vytvořte instanci třídy Presentation a vygenerujte prázdnou prezentaci.
- Získejte cílový snímek v Presentation.
- Přidejte ovládací prvek Media Player ActiveX pomocí metody addControl vystavené třídou ControlCollection.
- Získejte ovládací prvek Media Player ActiveX a nastavte cestu k videu pomocí jeho vlastností.
- Uložte prezentaci jako soubor PPTX.
Ukázkový kód níže, založený na výše uvedených krocích, ukazuje, jak přidat ovládací prvek Media Player ActiveX na snímek:
// Vytvořte prázdnou instanci prezentace
var pres = new aspose.slides.Presentation();
try {
// Přidání ActiveX ovládacího prvku Media Player
pres.getSlides().get_Item(0).getControls().addControl(aspose.slides.ControlType.WindowsMediaPlayer, 100, 100, 400, 400);
// Získejte přístup k ActiveX ovládacímu prvku Media Player a nastavte cestu k videu
pres.getSlides().get_Item(0).getControls().get_Item(0).getProperties().set_Item("java.net.URL", "Wildlife.wmv");
// Uložte prezentaci
pres.save("Output.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
if (pres != null) {
pres.dispose();
}
}
Úprava ActiveX ovládacího prvku
Aby bylo možné spravovat jednoduchý ActiveX ovládací prvek, jako je textové pole a jednoduché tlačítko příkazu na snímku, proveďte následující:
- Vytvořte instanci třídy Presentation a načtěte prezentaci, která obsahuje ActiveX ovládací prvky.
- Získejte odkaz na snímek podle jeho indexu.
- Získejte ActiveX ovládací prvky na snímku přístupem k ControlCollection.
- Získejte ActiveX ovládací prvek TextBox1 pomocí objektu Control.
- Změňte vlastnosti ActiveX ovládacího prvku TextBox1, které zahrnují text, písmo, výšku písma a pozici rámce.
- Získejte druhý ovládací prvek nazvaný CommandButton1.
- Změňte popisek tlačítka, písmo a pozici.
- Posuňte pozici rámců ActiveX ovládacích prvků.
- Zapište upravenou prezentaci do souboru PPTX.
Ukázkový kód níže, založený na výše uvedených krocích, ukazuje, jak spravovat jednoduchý ActiveX ovládací prvek:
const imageio = java.import("javax.imageio.ImageIO");
// Přístup k prezentaci s ActiveX ovládacími prvky
var pres = new aspose.slides.Presentation("ActiveX.pptm");
try {
// Přístup k prvnímu snímku v prezentaci
var slide = pres.getSlides().get_Item(0);
// změna textu TextBoxu
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);
// Změna náhradního obrázku. PowerPoint nahradí tento obrázek během aktivace ActiveX,
// takže někdy je v pořádku nechat obrázek beze změny.
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));
});
}
// Změna popisku tlačítka
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);
// Změna náhrady
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));
});
}
// posunutí o 100 bodů dolů
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);
// odstranění ovládacích prvků
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();
}
}
Často kladené otázky
Uchovává Aspose.Slides ActiveX ovládací prvky při čtení a opětovném uložení, pokud nemohou být spuštěny v runtime Pythonu?
Ano. Aspose.Slides je považuje za součást prezentace a může číst/upravovat jejich vlastnosti a rámy; není nutné spouštět samotné ovládací prvky k jejich zachování.
Jak se liší ActiveX ovládací prvky od OLE objektů v prezentaci?
ActiveX ovládací prvky jsou interaktivní řízené ovládací prvky (tlačítka, textová pole, přehrávač médií), zatímco OLE označuje vložené objekty aplikací (například list Excelu). Jsou ukládány a zpracovávány odlišně a mají různý model vlastností.
Fungují události ActiveX a VBA makra, pokud byl soubor upraven pomocí Aspose.Slides?
Aspose.Slides zachovává existující značkování a metadata; události a makra však běží pouze v PowerPointu na Windows, pokud to bezpečnostní nastavení umožní. Knihovna nevykonává VBA.