Cómo agregar formas a PowerPoint en Python
Aspose.Slides FOSS for Python admite agregar AutoShapes, Tables, Connectors y PictureFrames a las diapositivas de la presentación. Todos los tipos de forma se añaden a través de la colección slide.shapes.
Guía paso a paso
Paso 1: Instalar el paquete
pip install aspose-slides-fossVerifique la instalación:
import aspose.slides_foss as slides
print("Ready")Paso 2: Crear una presentación
Siempre utilice Presentation como gestor de contexto.
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)Paso 3: Agregar una AutoShape
slide.shapes.add_auto_shape(shape_type, x, y, width, height) coloca una forma en la posición y tamaño dados (todos en puntos). Utiliza las constantes ShapeType para 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)Paso 4: Agregar una tabla
slide.shapes.add_table(x, y, col_widths, row_heights) crea una tabla en la posición especificada. Los anchos de columna y las alturas de fila son listas de valores en puntos.
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)Paso 5: Añadir un conector
Los conectores enlazan visualmente dos formas. Crea primero las formas, luego agrega un conector y establece sus puntos de conexión de inicio y fin.
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)Los índices de los sitios de conexión se numeran del 0 al 3 para un rectángulo: superior=0, izquierda=1, inferior=2, derecha=3.
Paso 6: Añadir un marco de foto
Inserte una imagen y añádala a la diapositiva como un PictureFrame. Lea los bytes de la imagen primero, añádalos a la colección de imágenes de la presentación, luego cree el marco.
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)Problemas comunes y soluciones
La forma aparece fuera del área visible de la diapositiva
Las diapositivas son de 720 × 540 puntos por defecto. Los valores de x o y fuera de esos límites colocan la forma fuera de la diapositiva. Mantenga x < 720 y y < 540, y asegúrese de x + width <= 720 y y + height <= 540.
AttributeError: 'NoneType' object has no attribute 'text_frame'
add_auto_shape() devuelve el objeto shape directamente. Si ves None, verifica que no estés descartando el valor de retorno.
El texto de la celda de la tabla está vacío después de la asignación
La propiedad correcta es .text_frame.text (no .text directamente en la celda). Acceda a las celdas como table.rows[row_index][col_index].text_frame.text = "value".
Preguntas Frecuentes
¿Cuántas formas puedo añadir a una diapositiva?
No hay un límite impuesto por la biblioteca. Los límites prácticos dependen del tamaño del archivo y de la capacidad de renderizado de su visor PPTX de destino.
¿Puedo cambiar la posición de una forma después de agregarla?
Sí. El objeto shape devuelto por add_auto_shape() tiene las propiedades x, y, width y height que puedes establecer:
shape.x = 100
shape.y = 200
shape.width = 400
shape.height = 80¿Puedo establecer el color del contorno (borde) de la forma?
Sí, a través de 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)¿Se admiten los gráficos?
No. Los gráficos, SmartArt y los objetos OLE no están implementados en esta edición y generan NotImplementedError.