Cómo crear presentaciones en Python

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

Verifique 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 ShapeType

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


Ver también

 Español