管理 SmartArt 形状节点

添加 SmartArt 节点

Aspose.Slides for Python via .NET 提供了最简单的 API,以最简单的方式管理 SmartArt 形状。以下示例代码将帮助在 SmartArt 形状中添加节点和子节点。

  • 创建一个 Presentation 类的实例,并加载带有 SmartArt 形状的演示文稿。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 遍历第一张幻灯片中的每个形状。
  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArt。
  • 在 SmartArt 形状的 NodeCollection 中添加一个新节点,并在 TextFrame 中设置文本。
  • 现在,在新添加的 SmartArt 节点中添加一个子节点,并在 TextFrame 中设置文本。
  • 保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "AddNodes.pptx") as pres:
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:

        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 添加一个新的 SmartArt 节点
            node1 = shape.all_nodes.add_node()
            # 添加文本
            node1.text_frame.text = "测试"

            # 在父节点中添加新子节点。它将在集合的末尾添加
            new_node = node1.child_nodes.add_node()

            # 添加文本
            new_node.text_frame.text = "新节点已添加"

    # 保存演示文稿
    pres.save("AddSmartArtNode_out.pptx", slides.export.SaveFormat.PPTX)

在特定位置添加 SmartArt 节点

在以下示例代码中,我们解释了如何在特定位置添加属于 SmartArt 形状的相应节点的子节点。

  • 创建一个 Presentation 类的实例。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 在访问的幻灯片中添加一个 StackedList 类型的 SmartArt 形状。
  • 访问添加的 SmartArt 形状中的第一个节点。
  • 现在,在位置 2 为所选节点添加子节点,并设置其文本。
  • 保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 创建演示文稿实例
with slides.Presentation() as pres:
    # 访问演示文稿幻灯片
    slide = pres.slides[0]

    # 添加 Smart Art IShape
    smart = slide.shapes.add_smart_art(0, 0, 400, 400, art.SmartArtLayoutType.STACKED_LIST)

    # 访问添加的 SmartArt 形状中的节点
    node = smart.all_nodes[0]

    # 在父节点中的位置 2 添加新子节点
    chNode = node.child_nodes.add_node_by_position(2)

    # 添加文本
    chNode.text_frame.text = "示例文本已添加"

    # 保存演示文稿
    pres.save("AddSmartArtNodeByPosition_out.pptx", slides.export.SaveFormat.PPTX)

访问 SmartArt 节点

以下示例代码将帮助访问 SmartArt 形状内部的节点。请注意,您不能更改 SmartArt 的 LayoutType,因为它是只读的,并且仅在添加 SmartArt 形状时设置。

  • 创建一个 Presentation 类的实例,并加载带有 SmartArt 形状的演示文稿。

  • 通过使用其索引获取第一张幻灯片的引用。

  • 遍历第一张幻灯片中的每个形状。

  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArt。

  • 遍历 SmartArt 形状内部的所有节点。

  • 访问并显示诸如 SmartArt 节点位置、级别和文本等信息。

import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "AccessSmartArt.pptx") as pres:
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:
        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 遍历 SmartArt 内部的所有节点
            for i in range(len(shape.all_nodes)):
                # 访问索引为 i 的 SmartArt 节点
                node = shape.all_nodes[i]

                # 打印 SmartArt 节点参数
                print("i = {0}, text = {1},  level = {2}, position = {3}".format(i, node.text_frame.text, node.level, node.position))

访问 SmartArt 子节点

以下示例代码将帮助访问属于 SmartArt 形状相应节点的子节点。

  • 创建一个 PresentationEx 类的实例,并加载带有 SmartArt 形状的演示文稿。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 遍历第一张幻灯片中的每个形状。
  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArtEx。
  • 遍历 SmartArt 形状内部的所有节点。
  • 对于每个选定的 SmartArt 形状节点,遍历特定节点内部的所有子节点。
  • 访问并显示诸如子节点位置、级别和文本等信息。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "AccessChildNodes.pptx") as pres:
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:
        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 遍历 SmartArt 内部的所有节点
            for node0 in shape.all_nodes:
                # 遍历子节点
                for j in range(len(node0.child_nodes)):
                    # 访问 SmartArt 节点中的子节点
                    node = node0.child_nodes[j]

                    # 打印 SmartArt 子节点参数
                    print("j = {0}, text = {1},  level = {2}, position = {3}".format(j, node.text_frame.text, node.level, node.position))

在特定位置访问 SmartArt 子节点

在此示例中,我们将学习如何访问特定位置属于 SmartArt 形状相应节点的子节点。

  • 创建一个 Presentation 类的实例。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 添加一个 StackedList 类型的 SmartArt 形状。
  • 访问添加的 SmartArt 形状。
  • 访问所访问 SmartArt 形状中索引为 0 的节点。
  • 现在,使用 GetNodeByPosition() 方法访问所访问 SmartArt 节点的子节点位置 1。
  • 访问并显示诸如子节点位置、级别和文本等信息。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 实例化演示文稿
with slides.Presentation() as pres:
    # 访问第一张幻灯片
    slide = pres.slides[0]
    # 在第一张幻灯片中添加 SmartArt 形状
    smart = slide.shapes.add_smart_art(0, 0, 400, 400, art.SmartArtLayoutType.STACKED_LIST)
    # 访问 SmartArt 中索引为 0 的节点
    node = smart.all_nodes[0]
    # 访问父节点中位置为 1 的子节点
    position = 1
    chNode = node.child_nodes[position] 
    # 打印 SmartArt 子节点参数
    print("j = {0}, text = {1},  level = {2}, position = {3}".format(position, chNode.text_frame.text, chNode.level, chNode.position))

删除 SmartArt 节点

在此示例中,我们将学习如何删除 SmartArt 形状内部的节点。

  • 创建一个 Presentation 类的实例,并加载带有 SmartArt 形状的演示文稿。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 遍历第一张幻灯片中的每个形状。
  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArt。
  • 检查 SmartArt 是否有超过 0 个节点。
  • 选择要删除的 SmartArt 节点。
  • 现在,使用 RemoveNode() 方法删除所选节点并保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "RemoveNode.pptx") as pres:
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:
        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 将形状转换为 SmartArtEx
            if len(shape.all_nodes) > 0:
                # 访问 SmartArt 节点
                node = shape.all_nodes[0]

                # 移除所选节点
                shape.all_nodes.remove_node(node)

    # 保存演示文稿
    pres.save("RemoveSmartArtNode_out.pptx", slides.export.SaveFormat.PPTX)

在特定位置删除 SmartArt 节点

在此示例中,我们将学习如何在特定位置删除 SmartArt 形状内部的节点。

  • 创建一个 Presentation 类的实例,并加载带有 SmartArt 形状的演示文稿。
  • 通过使用其索引获取第一张幻灯片的引用。
  • 遍历第一张幻灯片中的每个形状。
  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArt。
  • 选择 SmartArt 形状中的索引 0 的节点。
  • 现在,检查所选 SmartArt 节点是否有超过 2 个子节点。
  • 现在,使用 RemoveNodeByPosition() 方法删除位置 1 的节点。
  • 保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "RemoveNodeSpecificPosition.pptx") as pres:             
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:
        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 将形状转换为 SmartArt
            if len(shape.all_nodes) > 0:
                # 访问 SmartArt 节点
                node = shape.all_nodes[0]
                if len(node.child_nodes) >= 2:
                    # 删除位置 1 的子节点
                    node.child_nodes.remove_node(1)

    # 保存演示文稿
    pres.save("RemoveSmartArtNodeByPosition_out.pptx", slides.export.SaveFormat.PPTX)

为 SmartArt 中的子节点设置自定义位置

现在,Aspose.Slides for Python via .NET 支持设置 SmartArtShape 的 X 和 Y 属性。以下代码示例展示了如何设置自定义 SmartArtShape 位置、大小和旋转,请注意,添加新节点会导致所有节点的位置和大小重新计算。

import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 加载所需的演示文稿
with slides.Presentation(path + "AccessChildNodes.pptx") as pres: 
	smart = pres.slides[0].shapes.add_smart_art(20, 20, 600, 500, art.SmartArtLayoutType.ORGANIZATION_CHART)

	# 移动 SmartArt 形状到新位置
	node = smart.all_nodes[1]
	shape = node.shapes[1]
	shape.x += (shape.width * 2)
	shape.y -= (shape.height / 2)

	# 更改 SmartArt 形状的宽度
	node = smart.all_nodes[2]
	shape = node.shapes[1]
	shape.width += (shape.width / 2)

	# 更改 SmartArt 形状的高度
	node = smart.all_nodes[3]
	shape = node.shapes[1]
	shape.height += (shape.height / 2)

	# 更改 SmartArt 形状的旋转
	node = smart.all_nodes[4]
	shape = node.shapes[1]
	shape.rotation = 90

	pres.save("SmartArt.pptx", slides.export.SaveFormat.PPTX)

检查助手节点

在以下示例代码中,我们将研究如何识别 SmartArt 节点集合中的助手节点并进行更改。

  • 创建一个 PresentationEx 类的实例并加载带有 SmartArt 形状的演示文稿。
  • 通过使用其索引获取第二张幻灯片的引用。
  • 遍历第一张幻灯片中的每个形状。
  • 检查形状是否为 SmartArt 类型,并在它是 SmartArt 时将所选形状转换为 SmartArtEx。
  • 遍历 SmartArt 形状内部的所有节点,并检查它们是否为助手节点。
  • 将助手节点的状态更改为普通节点。
  • 保存演示文稿。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

# 创建演示文稿实例
with slides.Presentation(path + "AssistantNode.pptx") as pres: 
    # 遍历第一张幻灯片中的每个形状
    for shape in pres.slides[0].shapes:
        # 检查形状是否为 SmartArt 类型
        if type(shape) is art.SmartArt:
            # 遍历 SmartArt 形状内部的所有节点
            for node in shape.all_nodes:
                tc = node.text_frame.text
                # 检查节点是否为助手节点
                if node.is_assistant:
                    # 将助手节点设置为 false 并将其变为普通节点
                    node.is_assistant = False
    # 保存演示文稿
    pres.save("ChangeAssitantNode_out.pptx", slides.export.SaveFormat.PPTX)

设置节点的填充格式

Aspose.Slides for Python via .NET 使得添加自定义 SmartArt 形状并设置其填充格式成为可能。本文解释了如何创建和访问 SmartArt 形状并使用 Aspose.Slides for Python via .NET 设置其填充格式。

请遵循以下步骤:

  • 创建一个 Presentation 类的实例。
  • 通过使用其索引获取幻灯片的引用。
  • 通过设置其 LayoutType 添加 SmartArt 形状。
  • 为 SmartArt 形状节点设置 FillFormat。
  • 将修改后的演示文稿写入 PPTX 文件。
import aspose.pydrawing as draw
import aspose.slides as slides
import aspose.slides.smartart as art

with slides.Presentation() as presentation: 
    # 访问幻灯片
    slide = presentation.slides[0]

    # 添加 SmartArt 形状和节点
    chevron = slide.shapes.add_smart_art(10, 10, 800, 60, art.SmartArtLayoutType.CLOSED_CHEVRON_PROCESS)
    node = chevron.all_nodes.add_node()
    node.text_frame.text = "一些文本"

    # 设置节点填充颜色
    for item in node.shapes:
        item.fill_format.fill_type = slides.FillType.SOLID
        item.fill_format.solid_fill_color.color = draw.Color.red

    # 保存演示文稿
    presentation.save("FillFormat_SmartArt_ShapeNode_out.pptx", slides.export.SaveFormat.PPTX)

生成 SmartArt 子节点的缩略图

开发人员可以通过以下步骤生成 SmartArt 子节点的缩略图:

  1. 实例化表示 PPTX 文件的 Presentation 类。
  2. 添加 SmartArt。
  3. 通过使用其索引获取节点的引用。
  4. 获取缩略图图像。
  5. 将缩略图图像以任何所需的图像格式保存。

以下示例生成 SmartArt 子节点的缩略图

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

# 实例化表示 PPTX 文件的 Presentation 类 
with slides.Presentation() as presentation: 
    # 添加 SmartArt 
    smart = pres.slides[0].shapes.add_smart_art(10, 10, 400, 300, art.SmartArtLayoutType.BASIC_CYCLE)

    # 通过使用其索引获取节点的引用  
    node = smart.nodes[1]

    # 获取缩略图
    with node.shapes[0].get_image() as bmp:
        # 保存缩略图
        bmp.save("SmartArt_ChildNote_Thumbnail_out.jpeg", slides.ImageFormat.JPEG)