Comment ajouter des formes à PowerPoint en Python

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-foss

Vé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 = 80

Puis-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.


Voir aussi

 Français