Gérer les nœuds de forme SmartArt dans les présentations avec Python
Vue d’ensemble
Les graphiques SmartArt dans les présentations PowerPoint sont organisés à travers des nœuds contenant du texte et définissant la structure du diagramme. Aspose.Slides vous permet de travailler avec ces nœuds SmartArt de manière programmatique : ajouter de nouveaux nœuds et nœuds enfants, insérer des nœuds enfants à une position spécifique, accéder aux nœuds existants et lire leur texte, leur niveau et leur position.
Cet article explique comment gérer les nœuds de forme SmartArt. Il montre comment supprimer des nœuds, travailler avec des nœuds enfants par indice ou par position, transformer un nœud assistant en nœud normal, ajuster la position, la taille et la rotation des formes de nœuds SmartArt, définir les formats de remplissage des nœuds et générer une image miniature pour un nœud enfant SmartArt.
Ajouter un nœud SmartArt
Aspose.Slides for Python via Java fournit une API pour gérer les formes SmartArt. L’exemple suivant ajoute un nœud et un nœud enfant à une forme SmartArt.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Ajoutez un nouveau nœud à la collection de nœuds de la forme SmartArt et définissez son texte via TextFrame.
- Ajoutez un nœud enfant au nouveau nœud et définissez son texte via TextFrame.
- Enregistrez la présentation.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("SimpleSmartArt.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
node = smart_art.getAllNodes().addNode()
node.getTextFrame().setText("Test")
child_node = node.getChildNodes().addNode()
child_node.getTextFrame().setText("New Node Added")
presentation.save("AddSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Ajouter un nœud SmartArt à une position spécifique
L’exemple suivant ajoute un nœud enfant à une position précise dans un nœud SmartArt.
- Créez une instance de la classe Presentation.
- Obtenez la première diapositive par son indice.
- Ajoutez une forme SmartArt avec la disposition StackedList à la diapositive.
- Accédez au premier nœud de la forme SmartArt ajoutée.
- Ajoutez un nœud enfant au nœud sélectionné à la position 2 en utilisant addNodeByPosition et définissez son texte.
- Enregistrez la présentation.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
child_node = node.getChildNodes().addNodeByPosition(2)
child_node.getTextFrame().setText("Sample Text Added")
presentation.save("AddSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Accéder à un nœud SmartArt
L’exemple suivant accède aux nœuds d’une forme SmartArt. La disposition renvoyée par getLayout est en lecture seule et est définie lors de l’ajout de la forme SmartArt.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Parcourez tous les nœuds de la forme SmartArt.
- Lisez et affichez la position, le niveau et le texte de chaque nœud SmartArt.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("SmartArtShape.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
print(node.getTextFrame().getText(), " ", node.getLevel(), " ", node.getPosition())
finally:
presentation.dispose()
Accéder à un nœud enfant SmartArt
L’exemple suivant accède aux nœuds enfants de chaque nœud d’une forme SmartArt.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Parcourez tous les nœuds de la forme SmartArt.
- Pour chaque nœud, parcourez ses nœuds enfants.
- Lisez et affichez la position, le niveau et le texte du nœud enfant.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArt
presentation = Presentation("AccessChildNodes.pptx")
try:
slide = presentation.getSlides().get_Item(0)
for shape in slide.getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
parent_node = smart_art.getAllNodes().get_Item(i)
for j in range(parent_node.getChildNodes().size()):
node = parent_node.getChildNodes().get_Item(j)
print("j = ", j, ", Text = ", node.getTextFrame().getText(), ", Level = ", node.getLevel(), ", Position = ", node.getPosition())
finally:
presentation.dispose()
Accéder à un nœud enfant SmartArt à une position spécifique
L’exemple suivant accède à un nœud enfant à un indice précis dans la collection du nœud parent.
- Créez une instance de la classe Presentation.
- Obtenez la première diapositive par son indice.
- Ajoutez une forme SmartArt avec la disposition StackedList.
- Accédez à la forme SmartArt ajoutée.
- Accédez au nœud d’indice 0 dans la forme SmartArt.
- Accédez au nœud enfant d’indice 1 en utilisant get_Item.
- Lisez et affichez la position, le niveau et le texte du nœud enfant.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
smart_art = slide.getShapes().addSmartArt(0, 0, 400, 400, SmartArtLayoutType.StackedList)
node = smart_art.getAllNodes().get_Item(0)
position = 1
child_node = node.getChildNodes().get_Item(position)
print("Text = ", child_node.getTextFrame().getText(), ", Level = ", child_node.getLevel(), ", Position = ", child_node.getPosition())
finally:
presentation.dispose()
Supprimer un nœud SmartArt
L’exemple suivant supprime un nœud d’une forme SmartArt.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Vérifiez que la forme SmartArt contient au moins un nœud.
- Sélectionnez le nœud SmartArt à supprimer.
- Supprimez le nœud sélectionné en utilisant removeNode.
- Enregistrez la présentation.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
smart_art.getAllNodes().removeNode(node)
presentation.save("RemoveSmartArtNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Supprimer un nœud SmartArt d’une position spécifique
L’exemple suivant supprime un nœud enfant à un indice précis dans la collection d’un nœud SmartArt.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Accédez au nœud SmartArt d’indice 0 s’il existe.
- Vérifiez que le nœud SmartArt sélectionné possède au moins deux nœuds enfants.
- Supprimez le nœud enfant d’indice 1 en utilisant removeNode.
- Enregistrez la présentation.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddSmartArtNode.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
if smart_art.getAllNodes().size() > 0:
node = smart_art.getAllNodes().get_Item(0)
if node.getChildNodes().size() >= 2:
node.getChildNodes().removeNode(1)
presentation.save("RemoveSmartArtNodeByPosition.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Définir une position personnalisée pour un nœud enfant dans un objet SmartArt
Aspose.Slides for Python via Java prend en charge le positionnement d’un SmartArtShape à l’aide de setX et setY. L’exemple suivant définit une position, une taille et une rotation personnalisées pour les formes de nœuds SmartArt. L’ajout de nouveaux nœuds recalcule les positions et tailles de tous les nœuds. Le positionnement personnalisé vous permet d’organiser les nœuds comme vous le souhaitez.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType
presentation = Presentation("SimpleSmartArt.pptx")
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(20, 20, 600, 500, SmartArtLayoutType.OrganizationChart)
node = smart_art.getAllNodes().get_Item(1)
shape = node.getShapes().get_Item(1)
shape.setX(shape.getX() + shape.getWidth() * 2)
shape.setY(shape.getY() - shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(2)
shape = node.getShapes().get_Item(1)
shape.setWidth(shape.getWidth() + shape.getWidth() * 2)
node = smart_art.getAllNodes().get_Item(3)
shape = node.getShapes().get_Item(1)
shape.setHeight(shape.getHeight() + shape.getHeight() * 2)
node = smart_art.getAllNodes().get_Item(4)
shape = node.getShapes().get_Item(1)
shape.setRotation(90)
presentation.save("SmartArt.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Vérifier un nœud assistant
Note
Cette section explore les formes SmartArt ajoutées aux diapositives de présentation de manière programmatique à l’aide d’Aspose.Slides pour Python via Java.La forme SmartArt source utilisée dans cet exemple est la suivante.
![]() |
|---|
| Figure : forme SmartArt source sur une diapositive |
L’exemple suivant identifie les nœuds assistants dans une collection de nœuds SmartArt et les transforme en nœuds normaux.
- Créez une instance de la classe Presentation et chargez la présentation contenant une forme SmartArt.
- Obtenez la première diapositive par son indice.
- Parcourez chaque forme de la première diapositive.
- Vérifiez si la forme est une instance SmartArt.
- Parcourez tous les nœuds de la forme SmartArt et vérifiez s’ils sont des Assistant Nodes.
- Transformez chaque nœud assistant en nœud normal.
- Enregistrez la présentation.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArt
presentation = Presentation("AddNodes.pptx")
try:
for shape in presentation.getSlides().get_Item(0).getShapes():
if isinstance(shape, SmartArt):
smart_art = shape
for i in range(smart_art.getAllNodes().size()):
node = smart_art.getAllNodes().get_Item(i)
if node.isAssistant():
node.setAssistant(False)
presentation.save("ChangeAssistantNode.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
![]() |
|---|
| Figure : nœuds assistants modifiés dans une forme SmartArt sur une diapositive |
Définir le format de remplissage d’un nœud
Aspose.Slides for Python via Java rend possible l’ajout de formes SmartArt personnalisées et la définition de leur format de remplissage. Cet article explique comment créer et accéder aux formes SmartArt et définir leur format de remplissage à l’aide d’Aspose.Slides for Python via Java.
Veuillez suivre les étapes ci‑dessous :
- Créez une instance de la classe Presentation.
- Obtenez une diapositive par son indice.
- Ajoutez une forme SmartArt avec la disposition ClosedChevronProcess.
- Définissez le FillFormat pour les nœuds de la forme SmartArt.
- Écrivez la présentation modifiée au format PPTX.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, SmartArtLayoutType, FillType
from java.awt import Color
presentation = Presentation()
try:
slide = presentation.getSlides().get_Item(0)
chevron = slide.getShapes().addSmartArt(10, 10, 800, 60, SmartArtLayoutType.ClosedChevronProcess)
node = chevron.getAllNodes().addNode()
node.getTextFrame().setText("Some text")
for item in node.getShapes():
item.getFillFormat().setFillType(FillType.Solid)
item.getFillFormat().getSolidFillColor().setColor(Color.RED)
presentation.save("TestSmart.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Générer une miniature d’un nœud enfant SmartArt
Pour générer une miniature d’un nœud enfant SmartArt, suivez ces étapes :
- Créez une instance de la classe Presentation.
- Ajoutez une forme SmartArt.
- Obtenez un nœud par son indice.
- Récupérez l’image miniature.
- Enregistrez l’image miniature dans le format d’image souhaité.
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SmartArtLayoutType, ImageFormat
presentation = Presentation()
try:
smart_art = presentation.getSlides().get_Item(0).getShapes().addSmartArt(10, 10, 400, 300, SmartArtLayoutType.BasicCycle)
node = smart_art.getNodes().get_Item(1)
image = node.getShapes().get_Item(0).getImage()
try:
image.save("SmartArt_ChildNode_Thumbnail.png", ImageFormat.Png)
finally:
image.dispose()
finally:
presentation.dispose()
FAQ
L’animation SmartArt est‑elle prise en charge ?
Oui. SmartArt est traité comme une forme ordinaire, vous pouvez donc appliquer des animations standard (entrée, sortie, mise en valeur, trajectoires) et ajuster le timing. Vous pouvez également animer les formes contenues dans les nœuds SmartArt lorsque c’est nécessaire.
Comment puis‑je localiser de manière fiable un SmartArt spécifique sur une diapositive si son ID interne est inconnu ?
Attribuez et recherchez par alternative text. La définition d’un texte alternatif distinctif sur le SmartArt vous permet de le trouver programmatiquement sans vous reposer sur les identifiants internes.
L’apparence du SmartArt sera‑t‑elle conservée lors de la conversion de la présentation en PDF ?
Oui. Aspose.Slides rend le SmartArt avec une grande fidélité visuelle pendant l’export PDF, préservant la mise en page, les couleurs et les effets.
Puis‑je extraire une image du SmartArt complet (pour les aperçus ou les rapports) ?
Oui. Vous pouvez rendre une forme SmartArt en formats raster ou en SVG pour une sortie vectorielle évolutive, ce qui convient aux miniatures, aux rapports ou à une utilisation web.

