Gestire i nodi di forma SmartArt nelle presentazioni usando Java
Panoramica
Le grafiche SmartArt nelle presentazioni PowerPoint sono organizzate 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 di forma SmartArt. Mostra come rimuovere i nodi, lavorare con i nodi figlio per indice o posizione, trasformare un nodo assistente in un nodo normale, regolare posizione, dimensione e rotazione delle forme dei nodi SmartArt, impostare i formati di riempimento dei nodi e generare un’immagine in miniatura per un nodo figlio SmartArt.
Aggiungere un nodo SmartArt
Aspose.Slides for Java ha fornito l’API più semplice per gestire le forme SmartArt nel modo più facile. Il seguente esempio di codice aiuta ad aggiungere un nodo e un nodo figlio all’interno di una forma SmartArt.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Aggiungi un nuovo nodo nella forma SmartArt NodeCollection e imposta il testo nel TextFrame.
- Ora, Aggiungi un nodo figlio nella forma SmartArt appena aggiunta e imposta il testo nel TextFrame.
- Salva la presentazione.
// Carica la presentazione desiderata
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try {
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof SmartArt)
{
// Esegui il cast della forma a SmartArt
SmartArt smart = (SmartArt) shape;
// Aggiungere un nuovo nodo SmartArt
SmartArtNode TemNode = (SmartArtNode) smart.getAllNodes().addNode();
// Aggiungere testo
TemNode.getTextFrame().setText("Test");
// Aggiungere un nuovo nodo figlio nel nodo genitore. Verrà aggiunto alla fine della collezione
SmartArtNode newNode = (SmartArtNode) TemNode.getChildNodes().addNode();
// Aggiungere testo
newNode.getTextFrame().setText("New Node Added");
}
}
// Salvataggio della presentazione
pres.save("AddSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Aggiungere un nodo SmartArt in una posizione specifica
Nel seguente esempio di codice spieghiamo come aggiungere i nodi figlio appartenenti ai rispettivi nodi della forma SmartArt in una posizione particolare.
- Crea un’istanza della classe Presentazione.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Aggiungi una forma SmartArt di tipo StackedList nella diapositiva acceduta.
- Accedi al primo nodo nella forma SmartArt aggiunta.
- Ora, aggiungi il nodo figlio per il nodo selezionato nella posizione 2 e imposta il suo testo.
- Salva la presentazione.
// Creazione di un'istanza di presentazione
Presentation pres = new Presentation();
try {
// Accedi alla diapositiva della presentazione
ISlide slide = pres.getSlides().get_Item(0);
// Aggiungi SmartArt IShape
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Accesso al nodo SmartArt all'indice 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Aggiunta di un nuovo nodo figlio nella posizione 2 del nodo genitore
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).addNodeByPosition(2);
// Aggiungi testo
chNode.getTextFrame().setText("Sample Text Added");
// Salva la presentazione
pres.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Accedere a un nodo SmartArt
Il seguente esempio di codice aiuta ad accedere ai nodi all’interno della forma SmartArt. Si noti che non è possibile modificare il LayoutType di SmartArt poiché è solo in lettura e viene impostato solo quando la forma SmartArt viene aggiunta.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Scorri tutti i Nodi all’interno della forma SmartArt.
- Accedi e visualizza le informazioni come posizione del nodo SmartArt, livello e testo.
// Istanziare la classe Presentation
Presentation pres = new Presentation("SmartArtShape.pptx");
try {
// Ottieni la prima diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : slide.getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof ISmartArt)
{
// Esegui il cast della forma a SmartArt
ISmartArt smart = (ISmartArt) shape;
// Scorri tutti i nodi all'interno di SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Accesso al nodo SmartArt all'indice i
SmartArtNode node = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Stampa i parametri del nodo SmartArt
System.out.print(node.getTextFrame().getText() + " " + node.getLevel() + " " + node.getPosition());
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Accedere a un nodo figlio SmartArt
Il seguente esempio di codice aiuta ad accedere ai nodi figlio appartenenti ai rispettivi nodi della forma SmartArt.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Scorri tutti i Nodi all’interno della forma SmartArt.
- Per ogni Nodo SmartArt selezionato, scorri tutti i nodi figlio all’interno del nodo specifico.
- Accedi e visualizza le informazioni come posizione del nodo figlio, livello e testo.
// Istanziare la classe Presentation
Presentation pres = new Presentation("AccessChildNodes.pptx");
try {
// Ottieni la prima diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : slide.getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof ISmartArt)
{
// Esegui il cast della forma a SmartArt
ISmartArt smart = (ISmartArt) shape;
// Scorri tutti i nodi all'interno di SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
// Accesso al nodo SmartArt all'indice i
SmartArtNode node0 = (SmartArtNode) smart.getAllNodes().get_Item(i);
// Scorrimento dei nodi figlio nel nodo SmartArt all'indice i
for (int j = 0; j < node0.getChildNodes().size(); j++)
{
// Accesso al nodo figlio nel nodo SmartArt
SmartArtNode node = (SmartArtNode) node0.getChildNodes().get_Item(j);
// Stampa i parametri del nodo figlio SmartArt
System.out.print("j = " + j + ", Text = " + node.getTextFrame().getText() + ", Level = " + node.getLevel() + ", Position = " + node.getPosition());
}
}
}
}
} finally {
if (pres != null) pres.dispose();
}
Accedere a un nodo figlio SmartArt in una posizione specifica
In questo esempio impareremo a accedere ai nodi figlio in una posizione particolare appartenenti ai rispettivi nodi della forma SmartArt.
- Crea un’istanza della classe Presentazione.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Aggiungi una forma SmartArt di tipo StackedList.
- Accedi alla forma SmartArt aggiunta.
- Accedi al nodo con indice 0 della forma SmartArt acceduta.
- Ora, accedi al nodo figlio nella posizione 1 per il nodo SmartArt acceduto usando il metodo get_Item().
- Accedi e visualizza le informazioni come posizione del nodo figlio, livello e testo.
// Istanziare la presentazione
Presentation pres = new Presentation();
try {
// Accesso alla prima diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Aggiunta della forma SmartArt nella prima diapositiva
ISmartArt smart = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList);
// Accesso al nodo SmartArt all'indice 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Accesso al nodo figlio alla posizione 1 nel nodo genitore
int position = 1;
SmartArtNode chNode = (SmartArtNode) ((SmartArtNodeCollection) node.getChildNodes()).get_Item(position);
// Stampa i parametri del nodo figlio SmartArt
System.out.print("Text = " + chNode.getTextFrame().getText() + ", Level = " + chNode.getLevel() + ", Position = " + chNode.getPosition());
} finally {
if (pres != null) pres.dispose();
}
Rimuovere un nodo SmartArt
In questo esempio impareremo a rimuovere i nodi all’interno della forma SmartArt.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Verifica se lo SmartArt ha più di 0 nodi.
- Seleziona il nodo SmartArt da eliminare.
- Ora, rimuovi il nodo selezionato usando il metodo RemoveNode.
- Salva la presentazione.
// Carica la presentazione desiderata
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof ISmartArt)
{
// Esegui il cast della forma a SmartArt
ISmartArt smart = (ISmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Accesso al nodo SmartArt all'indice 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
// Rimozione del nodo selezionato
smart.getAllNodes().removeNode(node);
}
}
}
// Salva la presentazione
pres.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Rimuovere un nodo SmartArt da una posizione specifica
In questo esempio impareremo a rimuovere i nodi all’interno della forma SmartArt in una posizione particolare.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della prima diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Seleziona il nodo della forma SmartArt con indice 0.
- Ora, verifica se il nodo SmartArt selezionato ha più di 2 nodi figlio.
- Ora, rimuovi il nodo nella Posizione 1 usando il metodo RemoveNode.
- Salva la presentazione.
// Carica la presentazione desiderata
Presentation pres = new Presentation("AddSmartArtNode.pptx");
try {
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof SmartArt)
{
// Esegui il cast della forma a SmartArt
SmartArt smart = (SmartArt) shape;
if (smart.getAllNodes().size() > 0)
{
// Accesso al nodo SmartArt all'indice 0
ISmartArtNode node = smart.getAllNodes().get_Item(0);
if (node.getChildNodes().size() >= 2)
{
// Rimozione del nodo figlio nella posizione 1
(node.getChildNodes()).removeNode(1);
}
}
}
}
// Salva la presentazione
pres.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Impostare una posizione personalizzata per un nodo figlio in un oggetto SmartArt
Ora Aspose.Slides for Java supporta l’impostazione delle proprietà SmartArtShape X e Y. Il frammento di codice sottostante mostra come impostare posizione, dimensione e rotazione personalizzate della SmartArtShape; si noti inoltre che l’aggiunta di nuovi nodi provoca una ricalcolazione di posizioni e dimensioni di tutti i nodi. Con le impostazioni di posizione personalizzate, l’utente può configurare i nodi secondo le esigenze.
// Istanziare la classe Presentation
Presentation pres = new Presentation("SimpleSmartArt.pptx");
try{
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart);
// Sposta la forma SmartArt in una nuova posizione
ISmartArtNode node = smart.getAllNodes().get_Item(1);
ISmartArtShape shape = node.getShapes().get_Item(1);
shape.setX(shape.getX() + shape.getWidth() * 2);
shape.setY(shape.getY() - shape.getHeight() * 2);
// Modifica le larghezze della forma SmartArt
node = smart.getAllNodes().get_Item(2);
shape = node.getShapes().get_Item(1);
shape.setWidth(shape.getWidth() + shape.getWidth() * 2);
// Modifica l'altezza della forma SmartArt
node = smart.getAllNodes().get_Item(3);
shape = node.getShapes().get_Item(1);
shape.setHeight(shape.getHeight() + shape.getHeight() * 2);
// Modifica la rotazione della forma SmartArt
node = smart.getAllNodes().get_Item(4);
shape = node.getShapes().get_Item(1);
shape.setRotation(90);
pres.save("SmartArt.pptx", SaveFormat.Pptx);
}finally {
pres.dispose();
}
Verificare un nodo assistente
Utilizzeremo la seguente forma SmartArt di origine per le indagini nelle diverse sezioni di questo articolo.
![]() |
|---|
| Figura: Forma SmartArt di origine nella diapositiva |
Nel seguente esempio di codice esamineremo come identificare nodi assistenti nella raccolta dei nodi SmartArt e modificarli.
- Crea un’istanza della classe Presentazione e carica la presentazione con la forma SmartArt.
- Ottieni il riferimento della seconda diapositiva usando il suo indice.
- Scorri tutte le forme nella prima diapositiva.
- Verifica se la forma è di tipo SmartArt e effettua il cast della forma selezionata a SmartArt se è SmartArt.
- Scorri tutti i nodi all’interno della forma SmartArt e verifica se sono nodi assistenti.
- Cambia lo stato del nodo assistente in nodo normale.
- Salva la presentazione.
// Creazione di un'istanza di presentazione
Presentation pres = new Presentation("AddNodes.pptx");
try {
// Scorri tutte le forme nella prima diapositiva
for (IShape shape : pres.getSlides().get_Item(0).getShapes())
{
// Verifica se la forma è di tipo SmartArt
if (shape instanceof ISmartArt)
{
// Esegui il cast della forma a SmartArt
ISmartArt smart = (SmartArt) shape;
// Scorrere tutti i nodi della forma SmartArt
for (int i = 0; i < smart.getAllNodes().size(); i++)
{
ISmartArtNode node = smart.getAllNodes().get_Item(i);
// Verifica se il nodo è un nodo Assistente
if (node.isAssistant())
{
// Impostare il nodo Assistente a false e trasformarlo in nodo normale
node.isAssistant();
}
}
}
}
// Salva la presentazione
pres.save("ChangeAssitantNode.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
![]() |
|---|
| Figura: Nodi assistenti modificati nella forma SmartArt nella diapositiva |
Impostare il formato di riempimento di un nodo
Aspose.Slides for Java consente di aggiungere forme SmartArt personalizzate e impostare il loro formato di riempimento. Questo articolo spiega come creare e accedere a forme SmartArt e impostare il loro formato di riempimento usando Aspose.Slides for Java.
Segui i passaggi seguenti:
- Crea un’istanza della classe Presentazione.
- Ottieni il riferimento di una diapositiva usando il suo indice.
- Aggiungi una forma SmartArt impostando il suo LayoutType.
- Imposta il FillFormat per i nodi della forma SmartArt.
- Scrivi la presentazione modificata come file PPTX.
// Istanziare la presentazione
Presentation pres = new Presentation();
try {
// Accesso alla diapositiva
ISlide slide = pres.getSlides().get_Item(0);
// Aggiunta della forma SmartArt e dei nodi
ISmartArt chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess);
ISmartArtNode node = chevron.getAllNodes().addNode();
node.getTextFrame().setText("Some text");
// Impostazione del colore di riempimento del nodo
for (IShape item : node.getShapes())
{
item.getFillFormat().setFillType(FillType.Solid);
item.getFillFormat().getSolidFillColor().setColor(Color.RED);
}
// Salva la presentazione
pres.save("TestSmart.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Generare una miniatura di un nodo figlio SmartArt
Gli sviluppatori possono generare una miniatura del nodo figlio di uno SmartArt seguendo i passaggi seguenti:
- Crea un’istanza della classe Presentazione.
- Aggiungi SmartArt.
- Ottieni il riferimento di un nodo usando il suo indice.
- Ottieni l’immagine in miniatura.
- Salva l’immagine in miniatura nel formato immagine desiderato.
// Istanziare la classe Presentation che rappresenta il file PPTX
Presentation pres = new Presentation();
try {
// Aggiungi SmartArt
ISmartArt smart = pres.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle);
// Ottieni il riferimento di un nodo usando il suo indice
ISmartArtNode node = smart.getNodes().get_Item(1);
// Ottieni la miniatura
IImage slideImage = node.getShapes().get_Item(0).getImage();
// Salva la miniatura
try {
slideImage.save("SmartArt_ChildNote_Thumbnail.png", ImageFormat.Png);
} finally {
if (slideImage != null) slideImage.dispose();
}
} finally {
if (pres != null) pres.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 la sequenza temporale. È inoltre possibile animare le forme all’interno dei nodi SmartArt quando necessario.
Come posso trovare in modo affidabile una SmartArt specifica su una diapositiva se il suo ID interno è sconosciuto?
Assegna e cerca tramite testo alternativo. Impostare un AltText distintivo sulla SmartArt consente di individuarla programmaticamente senza dipendere dagli identificatori interni.
L’aspetto della SmartArt sarà preservato durante la conversione della presentazione in PDF?
Sì. Aspose.Slides rende la SmartArt con alta fedeltà visiva durante l’esportazione in PDF, conservando layout, colori ed effetti.
Posso estrarre un’immagine dell’intera SmartArt (per anteprime o report)?
Sì. È possibile rendere una forma SmartArt in formati raster o in SVG per un output vettoriale scalabile, utile per miniature, report o utilizzo web.

