Manage SmartArt in PowerPoint Presentations Using Python

Overview

SmartArt is a PowerPoint diagram made from nodes, node shapes, and a layout. With Aspose.Slides for Python via .NET, you can create SmartArt, read text from its nodes, change its layout, inspect hidden nodes, configure organization chart layouts, and create picture organization charts.

Get Text from a SmartArt Object

A SmartArt node can contain one or more shapes. To read the visible text, iterate through SmartArt.all_nodes, then read the TextFrame returned by SmartArtShape.text_frame.

import aspose.slides as slides
import aspose.slides.smartart as smartart

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    if isinstance(shape, smartart.SmartArt):
        smart_art = shape

        for smart_art_node in smart_art.all_nodes:
            for smart_art_shape in smart_art_node.shapes:
                if smart_art_shape.text_frame is not None:
                    print(smart_art_shape.text_frame.text)

Change the Layout Type of a SmartArt Object

The SmartArt layout controls how nodes are arranged and connected. The following example creates a SmartArt object with the SmartArtLayoutType BASIC_BLOCK_LIST value, changes it to the BASIC_PROCESS value, and saves the presentation.

import aspose.slides as slides
import aspose.slides.smartart as smartart

with slides.Presentation() as presentation:
    smart_art = presentation.slides[0].shapes.add_smart_art(
        10, 10, 400, 300, smartart.SmartArtLayoutType.BASIC_BLOCK_LIST)

    smart_art.layout = smartart.SmartArtLayoutType.BASIC_PROCESS

    presentation.save("ChangeSmartArtLayout_out.pptx", slides.export.SaveFormat.PPTX)

Check Whether a SmartArt Node Is Hidden

SmartArtNode.is_hidden indicates whether the node is hidden in the SmartArt data model. Hidden nodes can exist in the structure even when the selected layout does not display them as visible diagram elements.

The following example adds a node to a SmartArt object that uses the SmartArtLayoutType RADIAL_CYCLE value and checks the node’s hidden state.

import aspose.slides as slides
import aspose.slides.smartart as smartart

with slides.Presentation() as presentation:
    smart_art = presentation.slides[0].shapes.add_smart_art(
        10, 10, 400, 300, smartart.SmartArtLayoutType.RADIAL_CYCLE)

    smart_art_node = smart_art.all_nodes.add_node()
    is_hidden = smart_art_node.is_hidden

    if is_hidden:
        print("The node is hidden in the SmartArt data model.")

    presentation.save("CheckSmartArtHiddenProperty_out.pptx", slides.export.SaveFormat.PPTX)

Get or Set the Organization Chart Layout

For SmartArt diagrams that use an organization chart layout, SmartArtNode.organization_chart_layout defines how child nodes are arranged under a parent node. For example, you can set child nodes to hang from the left, right, or both sides, depending on the selected OrganizationChartLayoutType.

The following example creates an organization chart and sets the layout for the first node to the OrganizationChartLayoutType LEFT_HANGING value.

import aspose.slides as slides
import aspose.slides.smartart as smartart

with slides.Presentation() as presentation:
    smart_art = presentation.slides[0].shapes.add_smart_art(
        10, 10, 400, 300, smartart.SmartArtLayoutType.ORGANIZATION_CHART)

    root_node = smart_art.nodes[0]
    root_node.organization_chart_layout = smartart.OrganizationChartLayoutType.LEFT_HANGING

    presentation.save("OrganizationChartLayout_out.pptx", slides.export.SaveFormat.PPTX)

Create a Picture Organization Chart

A picture organization chart is a SmartArt layout designed for hierarchy diagrams that include image placeholders. Use the SmartArtLayoutType PICTURE_ORGANIZATION_CHART value when adding the SmartArt object to a slide.

import aspose.slides as slides
import aspose.slides.smartart as smartart

with slides.Presentation() as presentation:
    smart_art = presentation.slides[0].shapes.add_smart_art(
        0, 0, 400, 400, smartart.SmartArtLayoutType.PICTURE_ORGANIZATION_CHART)

    presentation.save("PictureOrganizationChart_out.pptx", slides.export.SaveFormat.PPTX)

FAQ

Does SmartArt support mirroring or reversing for RTL languages?

Yes. The SmartArt.is_reversed property switches the diagram direction from left-to-right to right-to-left, or back, when the selected SmartArt layout supports reversal.

How can I copy SmartArt to the same slide or to another presentation while preserving formatting?

You can clone the SmartArt shape with ShapeCollection.add_clone or clone the whole slide that contains the SmartArt. Both approaches preserve size, position, and formatting.

How do I render SmartArt to a raster image for preview or web export?

Render the slide or the whole presentation to PNG or JPEG. SmartArt is rendered as part of the slide.

How can I find a specific SmartArt object on a slide if there are several?

Set a distinctive Shape.alternative_text or Shape.name value on the SmartArt shape, search for that value in Slide.shapes, and then check that the matching shape is a SmartArt.