Com afegir formes a PowerPoint amb Python

Com afegir formes a PowerPoint amb Python

Aspose.Slides FOSS for Python admet afegir AutoShapes, Tables, Connectors i PictureFrames a les diapositives de presentació. Tots els tipus de forma s’afegeixen a través de la col·lecció slide.shapes.

Guia pas a pas

Pas 1: Instal·la el paquet

pip install aspose-slides-foss

Verifiqueu la instal·lació:

import aspose.slides_foss as slides
print("Ready")

Pas 2: Crea una presentació

Utilitzeu sempre Presentation com a gestor de context.

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)

Pas 3: Afegeix una AutoShape

slide.shapes.add_auto_shape(shape_type, x, y, width, height) col·loca una forma a la posició i mida indicades (totes en punts). Utilitzeu les constants ShapeType per seleccionar la forma.

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)

Pas 4: Afegeix una taula

slide.shapes.add_table(x, y, col_widths, row_heights) crea una taula a la posició especificada. Les amplades de les columnes i les alçades de les files són llistes de valors en punts.

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)

Pas 5: Afegeix un connector

Els connectors enllacen visualment dues formes. Creeu primer les formes, després afegiu un connector i establiu els seus punts de connexió d’inici i final.

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)

Els índexs dels punts de connexió es numeren del 0 al 3 per a un rectangle: superior=0, esquerre=1, inferior=2, dret=3.


Pas 6: Afegeix un marc de foto

Incrusta una imatge i afegeix-la a la diapositiva com a PictureFrame. Llegeix primer els bytes de la imatge, afegeix-los a la col·lecció d’imatges de la presentació, i després crea el marc.

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)

Problemes comuns i solucions

La forma apareix fora de l’àrea visible de la diapositiva

Les diapositives són de 720 × 540 punts per defecte. Els valors de x o y fora d’aquests límits col·loquen la forma fora de la diapositiva. Mantingueu x < 720 i y < 540, i assegureu x + width <= 720 i y + height <= 540.

AttributeError: 'NoneType' object has no attribute 'text_frame'

add_auto_shape() retorna l’objecte shape directament. Si veus None, comprova que no estàs descartant el valor de retorn.

El text de la cel·la de la taula és buit després de l’assignació

La propietat correcta és .text_frame.text (no .text directament a la cel·la). Accediu a les cel·les com table.rows[row_index][col_index].text_frame.text = "value".


Preguntes freqüents

Quantes formes puc afegir a una diapositiva?

No hi ha cap límit imposat per la biblioteca. Els límits pràctics depenen de la mida del fitxer i de la capacitat de renderització del visualitzador PPTX de destinació.

Puc canviar la posició d’una forma després d’afegir-la?

Sí. L’objecte shape retornat per add_auto_shape() té les propietats x, y, width i height que podeu establir:

shape.x = 100
shape.y = 200
shape.width = 400
shape.height = 80

Puc establir el color del contorn (bord) de la forma?

Sí, 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)

S’admeten els gràfics?

No. Els gràfics, SmartArt i els objectes OLE no s’implementen en aquesta edició i generen NotImplementedError.


Vegeu també

 Català