Cómo cargar presentaciones en Python

Cómo cargar presentaciones en Python

Aspose.Slides FOSS for Python le permite abrir cualquier archivo .pptx, inspeccionar su contenido y guardarlo de nuevo en PPTX o extraer datos de él. Esta guía cubre la apertura de un archivo, la iteración de diapositivas, la lectura del texto de formas y el proceso de guardado de ida y vuelta.

Guía paso a paso

Paso 1: Instalar el paquete

pip install aspose-slides-foss

Paso 2: Abrir una presentación existente

Pase la ruta del archivo a slides.Presentation(). Utilice el administrador de contexto para garantizar la limpieza.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation("input.pptx") as prs:
    print(f"Slide count: {len(prs.slides)}")
    prs.save("output.pptx", SaveFormat.PPTX)

Las partes XML desconocidas en el archivo fuente se conservan literalmente: la biblioteca nunca elimina contenido que aún no comprende.


Paso 3: Inspeccionar diapositivas

Itera sobre todas las diapositivas e imprime su índice:

import aspose.slides_foss as slides

with slides.Presentation("deck.pptx") as prs:
    for i, slide in enumerate(prs.slides):
        shape_count = len(slide.shapes)
        print(f"Slide {i}: {shape_count} shapes")

Paso 4: Leer texto de forma

Iterar sobre las formas y leer el texto de las formas que tienen un TextFrame:

import aspose.slides_foss as slides

with slides.Presentation("deck.pptx") as prs:
    for slide in prs.slides:
        for shape in slide.shapes:
            if hasattr(shape, "text_frame") and shape.text_frame is not None:
                text = shape.text_frame.text
                if text.strip():
                    print(f"  Shape text: {text!r}")

Paso 5: Leer propiedades del documento

Acceder a las propiedades principales del documento desde prs.document_properties:

import aspose.slides_foss as slides

with slides.Presentation("deck.pptx") as prs:
    props = prs.document_properties
    print(f"Title:   {props.title}")
    print(f"Author:  {props.author}")
    print(f"Subject: {props.subject}")

Paso 6: Guardado de ida y vuelta

Después de inspeccionar o modificar la presentación, guárdala de nuevo en PPTX:

prs.save("output.pptx", SaveFormat.PPTX)

Guardar en una ruta diferente crea un nuevo archivo. Guardar en la misma ruta sobrescribe el original.


Problemas comunes y soluciones

FileNotFoundError

Verifique que la ruta al archivo .pptx sea correcta en relación con el directorio de trabajo. Utilice pathlib.Path para una construcción de rutas robusta:

from pathlib import Path
path = Path(__file__).parent / "assets" / "deck.pptx"
with slides.Presentation(str(path)) as prs:
    ...

Exception: File format is not supported

La biblioteca admite .pptx (Office Open XML) únicamente. Los archivos heredados .ppt (PowerPoint binario 97–2003) no son compatibles.

Shapes no tienen el atributo text_frame

Algunas formas (Connectors, PictureFrames, GroupShapes) no tienen un text_frame. Proteja con hasattr(shape, "text_frame") and shape.text_frame is not None antes de acceder al texto.


Preguntas Frecuentes

¿La carga preserva todo el contenido original?

Sí. Las partes XML desconocidas se conservan literalmente al guardar en una ronda de ida y vuelta. La biblioteca no eliminará ningún contenido XML que aún no entienda.

¿Puedo cargar un PPTX protegido con contraseña?

Las presentaciones protegidas con contraseña (cifradas) no son compatibles con esta edición.

¿Puedo extraer imágenes incrustadas?

Acceda a la colección de imágenes: prs.images devuelve el ImageCollection. Cada imagen tiene una propiedad content_type y una propiedad bytes para leer los datos de imagen sin procesar.

¿Se admite la carga desde un flujo en memoria?

Cargar directamente desde io.BytesIO no está expuesto en la API actual. Escriba los bytes en un archivo temporal primero:

import tempfile, os
import aspose.slides_foss as slides

with tempfile.NamedTemporaryFile(suffix=".pptx", delete=False) as tmp:
    tmp.write(pptx_bytes)
    tmp_path = tmp.name

try:
    with slides.Presentation(tmp_path) as prs:
        print(f"Slides: {len(prs.slides)}")
finally:
    os.unlink(tmp_path)

Ver también

 Español