Comment ajouter des formes à PowerPoint en Python
Aspose.Slides FOSS for Python prend en charge l’ajout d’AutoShapes, de Tables, de Connectors et de PictureFrames aux diapositives de présentation. Tous les types de formes sont ajoutés via la collection slide.shapes.
Guide étape par étape
Étape 1 : Installer le package
pip install aspose-slides-fossVérifiez l’installation :
import aspose.slides_foss as slides
print("Ready")Étape 2 : Créer une présentation
Utilisez toujours Presentation comme gestionnaire de contexte.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
# ... add shapes ...
prs.save("output.pptx", SaveFormat.PPTX)Étape 3 : Ajouter une AutoShape
slide.shapes.add_auto_shape(shape_type, x, y, width, height) place une forme à la position et à la taille données (toutes en points). Utilisez les constantes ShapeType pour sélectionner la forme.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
# Rectangle
rect = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 300, 100)
rect.add_text_frame("Rectangle shape")
# Ellipse
ellipse = slide.shapes.add_auto_shape(ShapeType.ELLIPSE, 400, 50, 200, 100)
ellipse.add_text_frame("Ellipse shape")
prs.save("autoshapes.pptx", SaveFormat.PPTX)Étape 4 : Ajouter un tableau
slide.shapes.add_table(x, y, col_widths, row_heights) crée un tableau à la position spécifiée. Les largeurs de colonnes et les hauteurs de lignes sont des listes de valeurs en points.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
col_widths = [150.0, 150.0, 150.0]
row_heights = [40.0, 40.0, 40.0]
table = slide.shapes.add_table(50, 200, col_widths, row_heights)
# Set header row text
headers = ["Product", "Units", "Revenue"]
for col, text in enumerate(headers):
table.rows[0][col].text_frame.text = text
# Set data rows
rows = [
["Widget A", "120", "$2,400"],
["Widget B", "85", "$1,700"],
]
for row_idx, row_data in enumerate(rows):
for col, text in enumerate(row_data):
table.rows[row_idx + 1][col].text_frame.text = text
prs.save("table.pptx", SaveFormat.PPTX)Étape 5 : Ajouter un connecteur
Les connecteurs relient visuellement deux formes. Créez d’abord les formes, puis ajoutez un connecteur et définissez ses points de connexion de départ et d’arrivée.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0]
box1 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 100, 150, 60)
box1.add_text_frame("Start")
box2 = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 350, 100, 150, 60)
box2.add_text_frame("End")
conn = slide.shapes.add_connector(ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10)
conn.start_shape_connected_to = box1
conn.start_shape_connection_site_index = 3 # right side of box1
conn.end_shape_connected_to = box2
conn.end_shape_connection_site_index = 1 # left side of box2
prs.save("connector.pptx", SaveFormat.PPTX)Les indices des sites de connexion sont numérotés 0–3 pour un rectangle : haut=0, gauche=1, bas=2, droite=3.
Étape 6 : Ajouter un cadre photo
Intégrez une image et ajoutez‑la à la diapositive en tant que PictureFrame. Lisez d’abord les octets de l’image, ajoutez‑les à la collection d’images de la présentation, puis créez le cadre.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
with open("logo.png", "rb") as f:
image_data = f.read()
image = prs.images.add_image(image_data)
slide = prs.slides[0]
slide.shapes.add_picture_frame(
ShapeType.RECTANGLE, # bounding shape type
50, 50, # x, y in points
200, 150, # width, height in points
image
)
prs.save("with-image.pptx", SaveFormat.PPTX)Problèmes courants et solutions
Forme apparaît en dehors de la zone visible de la diapositive
Les diapositives mesurent 720 × 540 points par défaut. Les valeurs de x ou y dépassant ces limites placent la forme hors de la diapositive. Conservez x < 720 et y < 540, et assurez x + width <= 720 et y + height <= 540.
AttributeError: 'NoneType' object has no attribute 'text_frame'
add_auto_shape() renvoie directement l’objet shape. Si vous voyez None, vérifiez que vous ne jetez pas la valeur de retour.
Le texte de la cellule du tableau est vide après l’affectation
La propriété correcte est .text_frame.text (pas .text directement sur la cellule). Accédez aux cellules comme table.rows[row_index][col_index].text_frame.text = "value".
Foire aux questions
Combien de formes puis‑je ajouter à une diapositive ?
Il n’y a pas de limite imposée par la bibliothèque. Les limites pratiques dépendent de la taille du fichier et de la capacité de rendu de votre visionneuse PPTX cible.
Puis-je modifier la position d’une forme après l’avoir ajoutée ?
Oui. L’objet shape renvoyé par add_auto_shape() possède les propriétés x, y, width et height que vous pouvez définir :
shape.x = 100
shape.y = 200
shape.width = 400
shape.height = 80Puis-je définir la couleur du contour (bordure) de la forme ?
Oui, via shape.line_format:
from aspose.slides_foss.drawing import Color
shape.line_format.fill_format.solid_fill_color.color = Color.from_argb(255, 200, 0, 0)Les graphiques sont-ils pris en charge ?
Non. Charts, SmartArt et les objets OLE ne sont pas implémentés dans cette édition et déclenchent NotImplementedError.