Com carregar presentacions a Python

Com carregar presentacions a Python

Aspose.Slides FOSS for Python lets you open any .pptx fitxer, inspeccioneu el seu contingut i deseu-lo de nou a PPTX o extraieu-ne dades. Aquesta guia cobreix l’obertura d’un fitxer, la iteració de les diapositives, la lectura del text de les formes i el procés de guardar i tornar a desar.

Guia pas a pas

Pas 1: Instal·la el paquet

pip install aspose-slides-foss

Pas 2: Obre una presentació existent

Passeu la ruta del fitxer a slides.Presentation(). Utilitzeu el gestor de context per garantir la neteja.

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)

Les parts XML desconegudes del fitxer d’origen es conserven literalment: la biblioteca mai elimina contingut que encara no entén.


Pas 3: Inspecciona les diapositives

Itera sobre totes les diapositives i imprimeix el seu índex:

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")

Pas 4: Llegeix el text de les formes

Itereu sobre les formes i llegiu el text de les formes que tenen 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}")

Pas 5: Llegeix les propietats del document

Accediu a les propietats principals del document des de 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}")

Pas 6: Desament d’anar i tornar

Després d’inspeccionar o modificar la presentació, desa-la de nou a PPTX:

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

Desar a un camí diferent crea un fitxer nou. Desar al mateix camí sobrescriu l’original.


Problemes comuns i solucions

FileNotFoundError

Comproveu que la ruta cap al .pptx fitxer és correcta respecte al directori de treball. Utilitzeu pathlib.Path per a una construcció robusta de rutes:

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 admet .pptx (Office Open XML) només. Legacy .ppt els fitxers (binary PowerPoint 97–2003) no són compatibles.

Les formes no tenen l’atribut text_frame

Algunes formes (Connectors, PictureFrames, GroupShapes) no tenen un text_frame. Protegeix amb hasattr(shape, "text_frame") and shape.text_frame is not None abans d’accedir al text.


Preguntes freqüents

La càrrega conserva tot el contingut original?

Sí. Les parts XML desconegudes es conserven literalment en el desament d’anada i tornada. La biblioteca no eliminarà cap contingut XML que encara no entengui.

Puc carregar un PPTX protegit per contrasenya?

Les presentacions protegides amb contrasenya (encriptades) no són compatibles en aquesta edició.

Puc extreure imatges incrustades?

Accedeix a la col·lecció d’imatges: prs.images retorna el ImageCollection. Cada imatge té un content_type i un bytes propietat per llegir les dades d’imatge en brut.

Es suporta la càrrega des d’un flux en memòria?

Carregant directament des de io.BytesIO no està exposat a l’API actual. Escriu els bytes a un fitxer temporal primer:

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)

Vegeu també

 Català