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-fossVerifiqueu 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 = 80Puc 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.