Gestire i controlli ActiveX nelle presentazioni usando Python
Introduzione
I controlli ActiveX sono usati nelle presentazioni. Aspose.Slides per Python tramite Java consente di aggiungere e gestire i controlli ActiveX, ma sono un po' più difficili da gestire rispetto alle forme normali della presentazione. Aspose.Slides supporta l’aggiunta di controlli ActiveX Media Player. Nota che i controlli ActiveX non sono forme; non fanno parte della presentazione’sShapeCollection. Fanno invece parte della separataControlCollection invece. 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 questi passaggi:
- Crea un’istanza della classePresentation e genera un’istanza di presentazione vuota.
- Accedi alla diapositiva di destinazione nellaPresentation.
- Aggiungi il controllo ActiveX Media Player utilizzando il metodoaddControl esposto daControlCollection.
- Accedi al controllo ActiveX Media Player e imposta il percorso video utilizzando le sue proprietà.
- Salva la presentazione come file PPTX.
Questo codice di esempio, basato sui passaggi precedenti, mostra come aggiungere un controllo ActiveX Media Player a una diapositiva:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ControlType, Presentation, SaveFormat
# Crea una presentazione vuota.
presentation = Presentation()
try:
# Aggiungi il controllo ActiveX Media Player.
slide = presentation.getSlides().get_Item(0)
control = slide.getControls().addControl(ControlType.WindowsMediaPlayer, 100, 100, 400, 400)
# Imposta il percorso del video.
control.getProperties().set_Item("URL", "Wildlife.wmv")
# Salva la presentazione.
presentation.save("Output.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Modificare un controllo ActiveX
Note
Aspose.Slides per Python tramite Java fornisce componenti per la gestione dei controlli ActiveX. Puoi accedere al controllo ActiveX già aggiunto nella tua presentazione e modificarlo o eliminarlo tramite le sue proprietà.Per gestire un semplice controllo ActiveX come una casella di testo e un semplice pulsante di comando su una diapositiva, esegui questi passaggi:
- Crea un’istanza della classePresentation e carica la presentazione contenente controlli ActiveX.
- Ottieni un riferimento alla diapositiva tramite il suo indice.
- Accedi ai controlli ActiveX nella diapositiva accedendo alControlCollection.
- Accedi al controllo ActiveX TextBox1 utilizzando l’oggettoControl.
- Modifica le proprietà del controllo ActiveX TextBox1, che includono testo, carattere, altezza del carattere e posizione del riquadro.
- Accedi al secondo controllo ActiveX chiamato CommandButton1.
- Modifica la didascalia del pulsante, il carattere e la posizione.
- Sposta la posizione dei riquadri dei controlli ActiveX.
- Scrivi la presentazione modificata in un file PPTM.
Questo codice di esempio, basato sui passaggi precedenti, mostra come gestire un semplice controllo ActiveX:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, ShapeFrame
from java.awt import Font, SystemColor
from java.awt.image import BufferedImage
from java.io import ByteArrayOutputStream
from javax.imageio import ImageIO
# Carica la presentazione con i controlli ActiveX.
presentation = Presentation("ActiveX.pptm")
try:
if presentation.getSlides().size() > 0 and presentation.getSlides().get_Item(0).getControls().size() >= 2:
# Accedi alla prima diapositiva.
slide = presentation.getSlides().get_Item(0)
# Modifica il testo della casella di testo.
control = slide.getControls().get_Item(0)
if str(control.getName()).lower() == "textbox1" and control.getProperties() is not None:
new_text = "Changed text"
control.getProperties().set_Item("Value", new_text)
# Cambia l'immagine sostitutiva. PowerPoint la sostituisce durante l'attivazione di ActiveX,
# quindi a volte può rimanere invariata.
image = BufferedImage(int(control.getFrame().getWidth()), int(control.getFrame().getHeight()), BufferedImage.TYPE_INT_ARGB)
graphics = image.getGraphics()
graphics.setColor(SystemColor.window)
graphics.fillRect(0, 0, image.getWidth(), image.getHeight())
font = Font(control.getProperties().get_Item("FontName"), Font.PLAIN, 16)
graphics.setColor(SystemColor.windowText)
graphics.setFont(font)
graphics.drawString(new_text, 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()
image_stream = ByteArrayOutputStream()
ImageIO.write(image, "PNG", image_stream)
image_bytes = image_stream.toByteArray()
substitute_image = presentation.getImages().addImage(image_bytes)
control.getSubstitutePictureFormat().getPicture().setImage(substitute_image)
# Modifica la didascalia del pulsante.
control = presentation.getSlides().get_Item(0).getControls().get_Item(1)
if str(control.getName()).lower() == "commandbutton1" and control.getProperties() is not None:
new_caption = "Show MessageBox"
control.getProperties().set_Item("Caption", new_caption)
# Cambia l'immagine sostitutiva.
image = BufferedImage(int(control.getFrame().getWidth()), int(control.getFrame().getHeight()), BufferedImage.TYPE_INT_ARGB)
graphics = image.getGraphics()
graphics.setColor(SystemColor.control)
graphics.fillRect(0, 0, image.getWidth(), image.getHeight())
font = Font(control.getProperties().get_Item("FontName"), Font.PLAIN, 16)
graphics.setColor(SystemColor.windowText)
graphics.setFont(font)
metrics = graphics.getFontMetrics(font)
graphics.drawString(new_caption, (image.getWidth() - metrics.stringWidth(new_caption)) // 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()
image_stream = ByteArrayOutputStream()
ImageIO.write(image, "PNG", image_stream)
image_bytes = image_stream.toByteArray()
substitute_image = presentation.getImages().addImage(image_bytes)
control.getSubstitutePictureFormat().getPicture().setImage(substitute_image)
# Sposta i controlli verso il basso di 100 punti.
for control in slide.getControls():
frame = control.getFrame()
new_frame = ShapeFrame(frame.getX(), frame.getY() + 100, frame.getWidth(), frame.getHeight(), frame.getFlipH(), frame.getFlipV(), frame.getRotation())
control.setFrame(new_frame)
presentation.save("withActiveX-edited_python.pptm", SaveFormat.Pptm)
# Rimuovi i controlli.
presentation.getSlides().get_Item(0).getControls().clear()
presentation.save("withActiveX-cleared_python.pptm", SaveFormat.Pptm)
else:
print("The first slide must contain the TextBox1 and CommandButton1 ActiveX controls.")
finally:
presentation.dispose()
FAQ
Aspose.Slides mantiene i controlli ActiveX durante la lettura e la risalvataggio se non possono essere eseguiti nel runtime Python?
Sì. Aspose.Slides li tratta come parte della presentazione e può leggere/modificare le loro proprietà e i riquadri; l’esecuzione dei controlli stessi non è necessaria per conservarli.
In che modo i controlli ActiveX differiscono dagli oggetti OLE in una presentazione?
I controlli ActiveX sono controlli interattivi gestiti (pulsanti, caselle di testo, media player), mentreOLE 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.