Gestire SmartArt nelle presentazioni PowerPoint con PHP

Panoramica

SmartArt è un diagramma PowerPoint composto da nodi, forme dei nodi e un layout. Con Aspose.Slides per PHP via 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.

Ottenere il testo da un oggetto SmartArt

Un nodo SmartArt può contenere una o più forme. Per leggere il testo visibile, iterare attraverso SmartArt::getAllNodes, quindi leggere il TextFrame restituito da SmartArtShape::getTextFrame.

$presentation = new Presentation("sample.pptx");
try {
    $slide = $presentation->getSlides()->get_Item(0);
    $shape = $slide->getShapes()->get_Item(0);

    if (java_instanceof($shape, new JavaClass("com.aspose.slides.ISmartArt"))) {
        $smartArt = $shape;

        foreach ($smartArt->getAllNodes() as $smartArtNode) {
            foreach ($smartArtNode->getShapes() as $smartArtShape) {
                if (!java_is_null($smartArtShape->getTextFrame())) {
                    echo($smartArtShape->getTextFrame()->getText());
                }
            }
        }
    }
} finally {
    $presentation->dispose();
}

Modificare 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 valore SmartArtLayoutType BasicBlockList, lo cambia al valore BasicProcess e salva la presentazione.

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::BasicBlockList);

    $smartArt->setLayout(SmartArtLayoutType::BasicProcess);

    $presentation->save("ChangeSmartArtLayout_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Verificare se un nodo SmartArt è nascosto

SmartArtNode::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 valore SmartArtLayoutType RadialCycle e controlla lo stato di visibilità del nodo.

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::RadialCycle);

    $smartArtNode = $smartArt->getAllNodes()->addNode();
    $isHidden = $smartArtNode->isHidden();

    if ($isHidden) {
        echo("The node is hidden in the SmartArt data model.");
    }

    $presentation->save("CheckSmartArtHiddenProperty_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Ottenere o impostare il layout dell’organigramma

Per i diagrammi SmartArt che utilizzano un layout di organigramma, SmartArtNode::getOrganizationChartLayout e SmartArtNode::setOrganizationChartLayout definiscono come i nodi figlio sono disposti sotto un nodo genitore. Ad esempio, è possibile impostare i nodi figlio affinché pendano a sinistra, a destra o su entrambi i lati, a seconda del valore di OrganizationChartLayoutType selezionato.

L’esempio seguente crea un organigramma e imposta il layout per il primo nodo al valore OrganizationChartLayoutType LeftHanging.

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        10, 10, 400, 300, SmartArtLayoutType::OrganizationChart);

    $rootNode = $smartArt->getNodes()->get_Item(0);
    $rootNode->setOrganizationChartLayout(OrganizationChartLayoutType::LeftHanging);

    $presentation->save("OrganizationChartLayout_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

Creare un organigramma con immagini

Un organigramma con immagini è un layout SmartArt progettato per diagrammi gerarchici che includono segnaposti per immagini. Utilizzare il valore SmartArtLayoutType PictureOrganizationChart quando si aggiunge l’oggetto SmartArt a una diapositiva.

$presentation = new Presentation();
try {
    $smartArt = $presentation->getSlides()->get_Item(0)->getShapes()->addSmartArt(
        0, 0, 400, 400, SmartArtLayoutType::PictureOrganizationChart);

    $presentation->save("PictureOrganizationChart_out.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

FAQ

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

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

Come copiare 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 renderizzare SmartArt in un’immagine raster per anteprima o esportazione web?

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

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

Impostare un valore distintivo per Shape::getAlternativeText o Shape::getName sulla forma SmartArt, cercare tale valore in BaseSlide::getShapes e quindi verificare che la forma corrispondente sia un SmartArt.