Gestire SmartArt nelle presentazioni PowerPoint usando Java

Panoramica

SmartArt è un diagramma PowerPoint composto da nodi, forme dei nodi e un layout. Con Aspose.Slides for Java, è possibile creare SmartArt, leggere il testo dai suoi nodi, modificare il layout, ispezionare nodi nascosti, configurare layout di organigrammi e creare organigrammi con immagini.

Ottieni il testo da un oggetto SmartArt

Un nodo SmartArt può contenere una o più forme. Per leggere il testo dalle forme del nodo, scorrere ISmartArt.getAllNodes e quindi leggere il ITextFrame restituito da ISmartArtShape.getTextFrame.

L’esempio richiede una presentazione con almeno una diapositiva e un oggetto SmartArt come prima forma su quella diapositiva. Stampa ogni frame di testo disponibile sulla console.

import com.aspose.slides.*;

Presentation presentation = new Presentation("sample.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ISmartArt smartArt = (ISmartArt) slide.getShapes().get_Item(0);
    for (ISmartArtNode node : smartArt.getAllNodes()) {
        for (ISmartArtShape nodeShape : node.getShapes()) {
            if (nodeShape.getTextFrame() != null) {
                System.out.println(nodeShape.getTextFrame().getText());
            }
        }
    }
} finally {
    presentation.dispose();
}

Modifica il tipo di layout di un oggetto SmartArt

Il layout SmartArt controlla come i nodi sono disposti e collegati. L’esempio seguente crea un oggetto SmartArt con il tipo di layout SmartArtLayoutType BasicBlockList, lo cambia al valore BasicProcess e salva la presentazione. La posizione e la dimensione passate a IShapeCollection.addSmartArt sono misurate in punti. Utilizzare ISmartArt.setLayout per modificare il layout.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ISmartArt smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicBlockList);
    smartArt.setLayout(SmartArtLayoutType.BasicProcess);

    presentation.save("ChangeSmartArtLayout.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Verifica se un nodo SmartArt è nascosto

ISmartArtNode.isHidden indica se il nodo è nascosto nel modello dati di SmartArt. I nodi nascosti possono esistere nella struttura anche quando il layout selezionato non li visualizza come elementi del diagramma.

L’esempio seguente aggiunge un nodo a un oggetto SmartArt che utilizza il tipo di layout SmartArtLayoutType RadialCycle e verifica lo stato di nascosto del nodo aggiunto. Stampa un messaggio se il nodo è nascosto e salva il diagramma.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ISmartArt smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.RadialCycle);
    ISmartArtNode node = smartArt.getAllNodes().addNode();
    boolean isHidden = node.isHidden();

    if (isHidden) {
        System.out.println("The node is hidden in the SmartArt data model.");
    }

    presentation.save("CheckSmartArtHiddenProperty.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Ottieni o imposta il layout dell’organigramma

Per i diagrammi SmartArt che utilizzano un layout di organigramma, ISmartArtNode.getOrganizationChartLayout e ISmartArtNode.setOrganizationChartLayout definiscono come i nodi figlio sono disposti sotto un nodo padre. Ad esempio, è possibile impostare i nodi figlio in modo che pendano a sinistra, a destra o su entrambi i lati, a seconda del tipo di layout OrganizationChartLayoutType selezionato.

L’esempio seguente crea un organigramma e imposta il layout per il primo nodo al valore OrganizationChartLayoutType LeftHanging. L’indice basato su zero 0 seleziona il primo nodo di livello superiore; i suoi nodi figlio utilizzano la disposizione selezionata. La presentazione modificata viene quindi salvata.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ISmartArt smartArt = slide.getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.OrganizationChart);
    ISmartArtNode rootNode = smartArt.getNodes().get_Item(0);
    rootNode.setOrganizationChartLayout(OrganizationChartLayoutType.LeftHanging);

    presentation.save("OrganizationChartLayout.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Crea un organigramma con immagini

Un organigramma con immagini è un layout SmartArt progettato per diagrammi gerarchici che includono segnaposti per immagini. Utilizzare il valore PictureOrganizationChart di SmartArtLayoutType quando si aggiunge l’oggetto SmartArt a una diapositiva. Questo esempio salva un diagramma con segnaposti per immagini; non popola i segnaposti con immagini.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ISmartArt smartArt = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.PictureOrganizationChart);

    presentation.save("PictureOrganizationChart.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Converti diagrammi legacy in gruppi di forme

Durante la modernizzazione di una presentazione esistente, potrebbe essere necessario aggiornare un organigramma creato originariamente in PowerPoint 97–2003. Aspose.Slides rappresenta questi diagrammi legacy come oggetti ILegacyDiagram. Utilizzare LegacyDiagram.convertToGroupShape per convertire un diagramma in un gruppo di forme in modo da poter modificare gli elementi visivi singoli. Vedere il riferimento API di LegacyDiagram per i dettagli.

La conversione aggiunge un nuovo gruppo alla raccolta di forme senza rimuovere il diagramma originale. Dopo la conversione riuscita, rimuovere l’originale con IShapeCollection.remove per evitare contenuti duplicati. Raccogliere i diagrammi legacy in un elenco prima della conversione in modo che l’aggiunta e la rimozione delle forme non interrompano l’iterazione.

L’esempio seguente apre una presentazione, ricerca ogni diapositiva, converte i diagrammi in gruppi di forme e salva la presentazione aggiornata come PPTX.

import com.aspose.slides.*;
import java.util.ArrayList;
import java.util.List;

Presentation presentation = new Presentation("legacy-diagrams.ppt");
try {
    for (ISlide slide : presentation.getSlides()) {
        List<ILegacyDiagram> legacyDiagrams = new ArrayList<>();
        for (IShape shape : slide.getShapes()) {
            if (shape instanceof ILegacyDiagram) {
                legacyDiagrams.add((ILegacyDiagram) shape);
            }
        }

        for (ILegacyDiagram legacyDiagram : legacyDiagrams) {
            IGroupShape groupShape = legacyDiagram.convertToGroupShape();

            if (groupShape != null) {
                slide.getShapes().remove(legacyDiagram);
            }
        }
    }

    presentation.save("modernized.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

La presentazione salvata contiene gruppi di forme modificabili al posto dei diagrammi legacy convertiti, senza diagrammi originali accanto. Aprire il PPTX in PowerPoint per modificare gli elementi individuali all’interno di ogni gruppo, come il testo, il riempimento o la posizione.

FAQ

Il SmartArt supporta il mirroring o l’inversione per le lingue RTL?

Sì. Il metodo ISmartArt.setReversed cambia la direzione del diagramma da sinistra-destra a destra-sinistra, o viceversa, quando il layout SmartArt selezionato supporta l’inversione.

Come posso copiare lo SmartArt nella stessa diapositiva o in un’altra presentazione mantenendo la formattazione?

È possibile clonare la forma SmartArt con ShapeCollection.addClone o clonare l’intera diapositiva che contiene lo SmartArt. Entrambi gli approcci conservano dimensione, posizione e formattazione.

Come posso rendere lo SmartArt in un’immagine raster per l’anteprima o l’esportazione web?

Renderizza la diapositiva o l’intera presentazione in PNG o JPEG. Lo SmartArt viene renderizzato come parte della diapositiva.

Come posso trovare uno specifico oggetto SmartArt su una diapositiva se ce ne sono diversi?

Utilizzare Shape.setAlternativeText o Shape.setName per assegnare un testo alternativo o un nome distintivo alla forma SmartArt, cercare quel valore in BaseSlide.getShapes e quindi verificare che la forma corrispondente sia un ISmartArt.