Gestire i nodi di forma SmartArt nelle presentazioni usando Python
Panoramica
I grafici SmartArt nelle presentazioni PowerPoint sono organizzati tramite nodi che contengono testo e definiscono la struttura del diagramma. Aspose.Slides consente di lavorare con questi nodi SmartArt in modo programmatico: aggiungere nuovi nodi e nodi figlio, inserire nodi figlio in una posizione specifica, accedere ai nodi esistenti e leggere il loro testo, livello e posizione.
Questo articolo spiega come gestire i nodi delle forme SmartArt. Mostra come rimuovere i nodi, lavorare con i nodi figlio per indice o posizione, trasformare un nodo assistente in un nodo normale, regolare la posizione, le dimensioni e la rotazione delle forme dei nodi SmartArt, impostare i formati di riempimento dei nodi e generare un’immagine miniatura per un nodo figlio SmartArt.
Aggiungere un nodo SmartArt
Aspose.Slides for Python via Java fornisce un’API per gestire le forme SmartArt. L’esempio seguente aggiunge un nodo e un nodo figlio a una forma SmartArt.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Add a new node alla node collection della forma SmartArt e imposta il suo testo tramite TextFrame.
- Add un child node al nuovo nodo e imposta il suo testo tramite TextFrame.
- Salva la presentazione.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("SimpleSmartArt.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
node = smart_art.getAllNodes().addNode()
node.getTextFrame().setText("Test")
child_node = node.getChildNodes().addNode()
child_node.getTextFrame().setText("New Node Added")
presentation.save("AddSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Aggiungere un nodo SmartArt in una posizione specifica
L’esempio seguente aggiunge un nodo figlio in una posizione specifica in un nodo SmartArt.
- Crea un’istanza della classe Presentation.
- Ottieni la prima diapositiva per indice.
- Aggiungi una forma SmartArt con il layout StackedList alla diapositiva.
- Accedi al primo nodo nella forma SmartArt aggiunta.
- Aggiungi un nodo figlio al nodo selezionato nella posizione 2 usando addNodeByPosition e imposta il suo testo.
- Salva la presentazione.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
child_node = node.getChildNodes().addNodeByPosition(2)
child_node.getTextFrame().setText("Sample Text Added")
presentation.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Accedere a un nodo SmartArt
L’esempio seguente accede ai nodi in una forma SmartArt. Il layout restituito da getLayout è di sola lettura ed è impostato quando la forma SmartArt viene aggiunta.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Itera su tutti i nodes nella forma SmartArt.
- Leggi e visualizza la posizione, il livello e il testo di ciascun nodo SmartArt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("SmartArtShape.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
print(node.getTextFrame().getText(), " ", node.getLevel(), " ", node.getPosition())
finally:
presentation.dispose()
Accedere a un nodo figlio SmartArt
L’esempio seguente accede ai nodi figlio di ciascun nodo in una forma SmartArt.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Itera su tutti i nodes nella forma SmartArt.
- Per ciascun nodo, iterare sui suoi child nodes.
- Leggi e visualizza la posizione, il livello e il testo del child node.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("AccessChildNodes.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
parent_node = smart_art.getAllNodes().get_Item(i)
for j in range(parent_node.getChildNodes().size()):
node = parent_node.getChildNodes().get_Item(j)
print("j = ", j, ", Text = ", node.getTextFrame().getText(), ", Level = ", node.getLevel(), ", Position = ", node.getPosition())
finally:
presentation.dispose()
Accedere a un nodo figlio SmartArt in una posizione specifica
L’esempio seguente accede a un nodo figlio in un indice specifico nella collezione del nodo genitore.
- Crea un’istanza della classe Presentation.
- Ottieni la prima diapositiva per indice.
- Aggiungi una forma SmartArt con il layout StackedList.
- Accedi alla forma SmartArt aggiunta.
- Accedi al nodo all’indice 0 nella forma SmartArt.
- Accedi al nodo figlio all’indice 1 usando get_Item.
- Leggi e visualizza la posizione, il livello e il testo del child node.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
position = 1
child_node = node.getChildNodes().get_Item(position)
print("Text = ", child_node.getTextFrame().getText(), ", Level = ", child_node.getLevel(), ", Position = ", child_node.getPosition())
finally:
presentation.dispose()
Rimuovere un nodo SmartArt
L’esempio seguente rimuove un nodo da una forma SmartArt.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Verifica che la forma SmartArt contenga almeno un nodo.
- Seleziona il nodo SmartArt da eliminare.
- Rimuovi il nodo selezionato usando removeNode.
- Salva la presentazione.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
smart_art.getAllNodes().removeNode(node)
presentation.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Rimuovere un nodo SmartArt da una posizione specifica
L’esempio seguente rimuove un nodo figlio in un indice specifico nella collezione di un nodo SmartArt.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Accedi al nodo SmartArt all’indice 0 se esiste.
- Verifica che il nodo SmartArt selezionato abbia almeno due nodi figlio.
- Rimuovi il nodo figlio all’indice 1 usando removeNode.
- Salva la presentazione.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
if node.getChildNodes().size() >= 2:
node.getChildNodes().removeNode(1)
presentation.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Impostare una posizione personalizzata per un nodo figlio in un oggetto SmartArt
Aspose.Slides for Python via Java supporta l’impostazione della posizione di uno SmartArtShape usando setX e setY. L’esempio seguente imposta una posizione, dimensione e rotazione personalizzate per le forme dei nodi SmartArt. L’aggiunta di nuovi nodi ricalcola le posizioni e le dimensioni di tutti i nodi. Il posizionamento personalizzato consente di disporre i nodi secondo le necessità.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation("SimpleSmartArt.pptx")
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart)
node = smart_art.getAllNodes().get_Item(1)
shape = node.getShapes().get_Item(1)
shape.setX(shape.getX() + shape.getWidth() * 2)
shape.setY(shape.getY() - shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(2)
shape = node.getShapes().get_Item(1)
shape.setWidth(shape.getWidth() + shape.getWidth() * 2)
node = smart_art.getAllNodes().get_Item(3)
shape = node.getShapes().get_Item(1)
shape.setHeight(shape.getHeight() + shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(4)
shape = node.getShapes().get_Item(1)
shape.setRotation(90)
presentation.save("SmartArt.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Verificare un nodo assistente
Note
Questa sezione esplora le forme SmartArt aggiunte alle diapositive della presentazione programmaticamente usando Aspose.Slides for Python via Java.La forma SmartArt di origine utilizzata in questo esempio è la seguente.
![]() |
|---|
| Figura: Forma SmartArt di origine su una diapositiva |
L’esempio seguente identifica i nodi assistente in una collezione di nodi SmartArt e li trasforma in nodi normali.
- Crea un’istanza della classe Presentation e carica la presentazione contenente una forma SmartArt.
- Ottieni la prima diapositiva per indice.
- Itera su ogni forma nella prima diapositiva.
- Verifica se la forma è un’istanza di SmartArt.
- Itera su tutti i nodi nella forma SmartArt e verifica se sono Assistant Nodes.
- Cambia ciascun nodo assistente in un nodo normale.
- Salva la presentazione.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddNodes.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
if node.isAssistant():
node.setAssistant(False)
presentation.save("ChangeAssistantNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
![]() |
|---|
| Figura: Nodi assistente modificati in una forma SmartArt su una diapositiva |
Impostare il formato di riempimento di un nodo
Aspose.Slides for Python via Java rende possibile aggiungere forme SmartArt personalizzate e impostare il loro formato di riempimento. Questo articolo spiega come creare e accedere alle forme SmartArt e impostare il loro formato di riempimento usando Aspose.Slides for Python via Java.
Si prega di seguire i passi seguenti:
- Crea un’istanza della classe Presentation.
- Ottieni una diapositiva per indice.
- Aggiungi una forma SmartArt con il layout ClosedChevronProcess.
- Imposta il FillFormat per i nodi della forma SmartArt.
- Scrivi la presentazione modificata come file PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType, FillType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess)
node = chevron.getAllNodes().addNode()
node.getTextFrame().setText("Some text")
for item in node.getShapes():
item.getFillFormat().setFillType(FillType.Solid)
item.getFillFormat().getSolidFillColor().setColor(Color.RED)
presentation.save("TestSmart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Generare una miniatura di un nodo figlio SmartArt
Per generare una miniatura di un nodo figlio SmartArt, segui questi passaggi:
- Crea un’istanza della classe Presentation.
- Add a SmartArt shape.
- Ottieni un nodo per indice.
- Ottieni l’immagine miniatura.
- Salva l’immagine miniatura in qualsiasi formato immagine desiderato.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType, ImageFormat
presentation = Presentation()
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle)
node = smart_art.getNodes().get_Item(1)
image = node.getShapes().get_Item(0).getImage()
try:
image.save("SmartArt_ChildNode_Thumbnail.png", ImageFormat.Png)
finally:
image.dispose()
finally:
presentation.dispose()
FAQ
L’animazione SmartArt è supportata?
Sì. SmartArt è trattato come una forma normale, quindi è possibile applicare animazioni standard (entrata, uscita, enfasi, percorsi di movimento) e regolare i tempi. È inoltre possibile animare le forme all’interno dei nodi SmartArt quando necessario.
Come posso individuare in modo affidabile uno SmartArt specifico su una diapositiva se il suo ID interno è sconosciuto?
Assegna e cerca tramite alternative text. Impostare un testo alternativo distintivo sullo SmartArt permette di trovarlo programmaticamente senza fare affidamento sugli identificatori interni.
L’aspetto di SmartArt verrà conservato durante la conversione della presentazione in PDF?
Sì. Aspose.Slides rende SmartArt con alta fedeltà visiva durante l'esportazione PDF, preservando layout, colori ed effetti.
Posso estrarre un’immagine dell’intero SmartArt (per anteprime o report)?
Sì. È possibile rendere una forma SmartArt in formati raster o in SVG per output vettoriale scalabile, rendendola adatta per miniature, report o utilizzo web.

