Cómo crear presentaciones en Python
Aspose.Slides FOSS for Python le permite crear presentaciones de PowerPoint completamente en Python sin depender de Microsoft Office. Esta guía muestra cómo crear una nueva presentación, agregar diapositivas y formas, dar formato al texto y guardar el resultado.
Guía paso a paso
Paso 1: Instalar el paquete
Instale Aspose.Slides FOSS desde PyPI. Se requiere Python 3.10 o posterior.
pip install aspose-slides-fossVerifique la instalación:
import aspose.slides_foss as slides
print("Aspose.Slides FOSS ready")La dependencia lxml se instala automáticamente. No se requieren otros paquetes del sistema.
Paso 2: Importar los módulos requeridos
Importa el paquete y el enum SaveFormat necesario para guardar.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
from aspose.slides_foss import ShapeTypeTodas las constantes de tipo de forma se encuentran en aspose.slides_foss.ShapeType. Todos los tipos de formato (FillType, NullableBool) también están en aspose.slides_foss.
Paso 3: Crear una presentación
Utilice slides.Presentation() como gestor de contexto. Una nueva presentación comienza con una diapositiva en blanco.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
print(f"Slides in new presentation: {len(prs.slides)}")
# work with prs inside this block
prs.save("output.pptx", SaveFormat.PPTX)Importante: Siempre abra y use Presentation dentro de un bloque with. No almacene una referencia fuera de la declaración with; los recursos no se liberarán correctamente.
Paso 4: Acceder a una diapositiva
La primera diapositiva está en el índice 0. Una presentación en blanco tiene exactamente una diapositiva.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
slide = prs.slides[0] # zero-based index
print(f"Slide at index 0: {slide}")
prs.save("output.pptx", SaveFormat.PPTX)Paso 5: Añadir una forma
Use slide.shapes.add_auto_shape() para agregar una AutoShape. Los parámetros son (shape_type, x, y, width, height) todos en puntos (1 punto = 1/72 de pulgada; la diapositiva estándar es 720 × 540 pt).
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 at (50, 50) with 400 wide and 120 tall
shape = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 400, 120)
# Attach a text frame
shape.add_text_frame("Hello from Aspose.Slides FOSS!")
prs.save("with-shape.pptx", SaveFormat.PPTX)Paso 6: Guardar la presentación
Llame prs.save(path, SaveFormat.PPTX) antes de que el bloque with finalice. PPTX es el único formato de salida compatible.
prs.save("result.pptx", SaveFormat.PPTX)El archivo se escribe de forma atómica; si ocurre un error antes de esta llamada, no se crea ningún archivo de salida.
Ejemplo completo y funcional
El siguiente script crea una presentación de dos diapositivas con una forma de título en la primera diapositiva y una tabla en la segunda.
import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType, NullableBool, FillType
from aspose.slides_foss.drawing import Color
from aspose.slides_foss.export import SaveFormat
with slides.Presentation() as prs:
# --- Slide 1: title shape ---
slide1 = prs.slides[0]
title = slide1.shapes.add_auto_shape(ShapeType.RECTANGLE, 40, 40, 640, 80)
tf = title.add_text_frame("Q1 Results: Executive Summary")
fmt = tf.paragraphs[0].portions[0].portion_format
fmt.font_height = 32
fmt.font_bold = NullableBool.TRUE
fmt.fill_format.fill_type = FillType.SOLID
fmt.fill_format.solid_fill_color.color = Color.from_argb(255, 0, 70, 127)
# --- Slide 2: table ---
prs.slides.add_empty_slide(prs.layout_slides[0])
slide2 = prs.slides[1]
table = slide2.shapes.add_table(40, 40, [200.0, 120.0, 120.0], [40.0, 40.0, 40.0])
headers = ["Region", "Revenue", "Growth"]
data = [
["North", "$1.2M", "+8%"],
["South", "$0.9M", "+4%"],
]
for col, header in enumerate(headers):
table.rows[0][col].text_frame.text = header
for row_idx, row_data in enumerate(data):
for col, cell_text in enumerate(row_data):
table.rows[row_idx + 1][col].text_frame.text = cell_text
prs.save("q1-results.pptx", SaveFormat.PPTX)
print("Saved q1-results.pptx")Problemas comunes y soluciones
ResourceWarning: unclosed Presentation
Estás instanciando Presentation sin un bloque with. Siempre usa:
with slides.Presentation() as prs:
...AttributeError: __enter__
Si ves este error, verifica que hayas importado aspose.slides_foss (no aspose.slides). El nombre del paquete en PyPI es aspose-slides-foss y la importación en tiempo de ejecución es aspose.slides_foss.
TypeError: SaveFormat.PPTX is not callable
SaveFormat.PPTX es un miembro de enumeración, no una función. Úselo como prs.save("file.pptx", SaveFormat.PPTX).
Preguntas frecuentes
¿Cuál es el tamaño de diapositiva predeterminado?
Un nuevo Presentation() crea diapositivas con el tamaño estándar de 10 × 7,5 pulgadas (720 × 540 puntos). Cambiar el tamaño de la diapositiva aún no es compatible en esta edición.
¿Puedo añadir más de una diapositiva?
Sí. Llame prs.slides.add_empty_slide(prs.layout_slides[0]) para añadir una diapositiva en blanco y acceder a ella por índice:
prs.slides.add_empty_slide(prs.layout_slides[0])
slide2 = prs.slides[1]¿Puedo abrir un archivo existente y añadir diapositivas?
Sí:
with slides.Presentation("existing.pptx") as prs:
prs.slides.add_empty_slide(prs.layout_slides[0])
prs.save("existing.pptx", SaveFormat.PPTX)¿En qué formatos puedo guardar?
Solo SaveFormat.PPTX es compatible. La exportación a PDF, HTML, SVG o imágenes no está disponible en esta edición.