Come caricare presentazioni in Python

Come caricare presentazioni in Python

Aspose.Slides FOSS for Python lets you open any .pptx file, ispeziona il suo contenuto e salva nuovamente in PPTX o estrai i dati da esso. Questa guida copre l’apertura di un file, l’iterazione delle diapositive, la lettura del testo delle forme e il salvataggio round‑trip.

Guida passo-passo

Passo 1: Installa il pacchetto

pip install aspose-slides-foss

Passo 2: Apri una presentazione esistente

Passa il percorso del file a slides.Presentation(). Usa il gestore di contesto per garantire la pulizia.

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)

Le parti XML sconosciute nel file di origine vengono preservate alla lettera: la libreria non rimuove mai contenuti che non comprende ancora.


Passo 3: Ispeziona le diapositive

Itera su tutte le diapositive e stampa il loro indice:

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

Passo 4: Leggi il testo delle forme

Itera sulle forme e leggi il testo dalle forme che hanno 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}")

Passo 5: Leggi le proprietà del documento

Accedi alle proprietà di base del documento da 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}")

Passo 6: Salvataggio round‑trip

Dopo aver ispezionato o modificato la presentazione, salvala nuovamente in PPTX:

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

Salvare in un percorso diverso crea un nuovo file. Salvare nello stesso percorso sovrascrive l’originale.


Problemi comuni e soluzioni

FileNotFoundError

Verifica che il percorso verso il .pptx file sia corretto rispetto alla directory di lavoro. Usa pathlib.Path per una costruzione robusta del percorso:

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 libreria supporta .pptx (Office Open XML) solo. I file legacy .ppt (binary PowerPoint 97–2003) non sono supportati.

Le forme non hanno l’attributo text_frame

Alcune forme (Connectors, PictureFrames, GroupShapes) non hanno un text_frame. Proteggi con hasattr(shape, "text_frame") and shape.text_frame is not None prima di accedere al testo.


Domande frequenti

Il caricamento preserva tutto il contenuto originale?

Sì. Le parti XML sconosciute vengono preservate alla lettera durante il salvataggio round‑trip. La libreria non rimuoverà alcun contenuto XML che non comprende ancora.

Posso caricare un PPTX protetto da password?

Le presentazioni protette da password (cifrati) non sono supportate in questa edizione.

Posso estrarre le immagini incorporate?

Accedi alla collezione di immagini: prs.images restituisce il ImageCollection. Ogni immagine ha un content_type e un bytes proprietà per leggere i dati grezzi dell’immagine.

Il caricamento da uno stream in memoria è supportato?

Caricamento direttamente da io.BytesIO non è esposto nell’API corrente. Scrivi i byte in un file temporaneo prima:

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)

Vedi anche

 Italiano