Gestisci i controlli ActiveX nelle presentazioni usando Java
Introduzione
I controlli ActiveX sono utilizzati nelle presentazioni. Aspose.Slides per Java consente di aggiungere e gestire i controlli ActiveX, ma sono un po' più difficili da gestire rispetto alle forme normali delle presentazioni. Abbiamo implementato il supporto per aggiungere il controllo Active Media Player in Aspose.Slides. Nota che i controlli ActiveX non sono forme; non fanno parte della IShapeCollection. Sono invece parte della separata IControlCollection. In questo argomento ti mostreremo come lavorare con essi.
Aggiungere un controllo ActiveX Media Player a una diapositiva
Per aggiungere un controllo ActiveX Media Player, esegui quanto segue:
- Crea un’istanza della classe Presentation e genera un’istanza di presentazione vuota.
- Accedi alla diapositiva di destinazione nella Presentation.
- Aggiungi il controllo ActiveX Media Player usando il metodo addControl esposto da IControlCollection.
- Accedi al controllo ActiveX Media Player e imposta il percorso del video utilizzando le sue proprietà.
- Salva la presentazione come file PPTX.
Questo codice di esempio, basato sui passaggi sopra, mostra come aggiungere il controllo ActiveX Media Player a una diapositiva:
// Crea un'istanza di presentazione vuota
Presentation pres = new Presentation();
try {
// Aggiunta del controllo ActiveX Media Player
pres.getSlides().get_Item(0).getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400);
// Accedi al controllo ActiveX Media Player e imposta il percorso del video
pres.getSlides().get_Item(0).getControls().get_Item(0).getProperties().set_Item("URL", "Wildlife.wmv");
// Salva la presentazione
pres.save("Output.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Modificare un controllo ActiveX
Per gestire un semplice controllo ActiveX come una casella di testo e un pulsante di comando su una diapositiva, esegui quanto segue:
- Crea un’istanza della classe Presentation e carica la presentazione contenente controlli ActiveX.
- Ottieni un riferimento alla diapositiva per indice.
- Accedi ai controlli ActiveX nella diapositiva accedendo alla IControlCollection.
- Accedi al controllo ActiveX TextBox1 usando l’oggetto IControl.
- Modifica le proprietà del controllo ActiveX TextBox1, comprese testo, carattere, altezza del carattere e posizione del frame.
- Accedi al secondo controllo di accesso chiamato CommandButton1.
- Modifica la didascalia del pulsante, il carattere e la posizione.
- Sposta la posizione dei frame dei controlli ActiveX.
- Scrivi la presentazione modificata in un file PPTX.
Questo codice di esempio, basato sui passaggi sopra, mostra come gestire un semplice controllo ActiveX:
// Accesso alla presentazione con controlli ActiveX
Presentation pres = new Presentation("ActiveX.pptm");
try {
// Accesso alla prima diapositiva nella presentazione
ISlide slide = pres.getSlides().get_Item(0);
// Modifica del testo della TextBox
IControl control = slide.getControls().get_Item(0);
if (control.getName().equalsIgnoreCase("TextBox1") && control.getProperties() != null) {
String newText = "Changed text";
control.getProperties().set_Item("Value", newText);
// Modifica dell'immagine sostitutiva. PowerPoint sostituirà questa immagine durante l'attivazione ActiveX,
// quindi a volte è accettabile lasciare l'immagine invariata.
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.window);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.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();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// Modifica della didascalia del pulsante
control = pres.getSlides().get_Item(0).getControls().get_Item(1);
if (control.getName().equalsIgnoreCase("CommandButton1") && control.getProperties() != null) {
String newCaption = "Show MessageBox";
control.getProperties().set_Item("Caption", newCaption);
// Modifica del sostituto
BufferedImage image = new BufferedImage((int) control.getFrame().getWidth(), (int) control.getFrame().getHeight(),
BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics graphics = image.getGraphics();
graphics.setColor(SystemColor.control);
graphics.fillRect(0, 0, image.getWidth(), image.getHeight());
java.awt.Font font = new java.awt.Font(control.getProperties().get_Item("FontName"), java.awt.Font.PLAIN, 16);
graphics.setColor(SystemColor.windowText);
graphics.setFont(font);
FontMetrics 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();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
control.getSubstitutePictureFormat().getPicture().setImage(pres.getImages().addImage(baos.toByteArray()));
}
// spostamento di 100 punti verso il basso
for (IControl ctl : pres.getSlides().get_Item(0).getControls()) {
IShapeFrame 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);
// rimozione dei controlli
pres.getSlides().get_Item(0).getControls().clear();
pres.save("withActiveX-cleared_java.pptm", SaveFormat.Pptm);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
FAQ
Aspose.Slides conserva i controlli ActiveX durante la lettura e il salvataggio se non possono essere eseguiti nel runtime Java?
Sì. Aspose.Slides li tratta come parte della presentazione e può leggere/modificare le loro proprietà e i loro frame; non è necessario eseguire i controlli stessi per conservarli.
In cosa i controlli ActiveX differiscono dagli oggetti OLE in una presentazione?
I controlli ActiveX sono controlli interattivi gestiti (pulsanti, caselle di testo, lettore multimediale), mentre OLE si riferisce a oggetti applicativi incorporati (ad esempio, un foglio di lavoro Excel). Sono memorizzati e gestiti in modo diverso e hanno modelli di proprietà differenti.
Gli eventi ActiveX e le macro VBA funzionano se il file è stato modificato da Aspose.Slides?
Aspose.Slides conserva il markup e i metadati esistenti; tuttavia, eventi e macro vengono eseguiti solo all’interno di PowerPoint su Windows quando la sicurezza lo consente. La libreria non esegue VBA.