Jak ładować prezentacje w Pythonie
Aspose.Slides FOSS for Python pozwala otworzyć dowolny plik .pptx, sprawdzić jego zawartość i albo zapisać go ponownie jako PPTX, albo wyodrębnić z niego dane. Ten przewodnik obejmuje otwieranie pliku, iterację slajdów, odczytywanie tekstu kształtów oraz zapis w trybie round‑tripping.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
pip install aspose-slides-fossKrok 2: Otwórz istniejącą prezentację
Przekaż ścieżkę pliku do slides.Presentation(). Użyj menedżera kontekstu, aby zapewnić sprzątanie.
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)Nieznane części XML w pliku źródłowym są zachowywane dosłownie: biblioteka nigdy nie usuwa treści, której jeszcze nie rozumie.
Krok 3: Sprawdź slajdy
Iteruj po wszystkich slajdach i wypisz ich indeks:
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")Krok 4: Odczyt tekstu kształtu
Iteruj po kształtach i odczytaj tekst z kształtów, które mają 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}")Krok 5: Odczyt właściwości dokumentu
Uzyskaj dostęp do podstawowych właściwości dokumentu z 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}")Krok 6: Zapis w trybie dwukierunkowym
Po sprawdzeniu lub modyfikacji prezentacji, zapisz ją ponownie jako PPTX:
prs.save("output.pptx", SaveFormat.PPTX)Zapisywanie w innej ścieżce tworzy nowy plik. Zapisywanie w tej samej ścieżce nadpisuje oryginał.
Typowe problemy i rozwiązania
FileNotFoundError
Sprawdź, czy ścieżka do pliku .pptx jest poprawna względem katalogu roboczego. Użyj pathlib.Path do solidnego konstruowania ścieżek:
from pathlib import Path
path = Path(__file__).parent / "assets" / "deck.pptx"
with slides.Presentation(str(path)) as prs:
...Exception: File format is not supported
Biblioteka obsługuje wyłącznie .pptx (Office Open XML). Pliki starszego formatu .ppt (binarny PowerPoint 97–2003) nie są obsługiwane.
Kształty nie mają atrybutu text_frame
Niektóre kształty (Connectors, PictureFrames, GroupShapes) nie mają text_frame. Zabezpiecz się przy użyciu hasattr(shape, "text_frame") and shape.text_frame is not None przed dostępem do tekstu.
Najczęściej zadawane pytania
Czy ładowanie zachowuje całą oryginalną treść?
Tak. Nieznane części XML są zachowywane dosłownie przy zapisie w trybie round‑trip. Biblioteka nie usunie żadnej zawartości XML, której jeszcze nie rozumie.
Czy mogę załadować plik PPTX zabezpieczony hasłem?
Prezentacje chronione hasłem (zaszyfrowane) nie są obsługiwane w tej edycji.
Czy mogę wyodrębnić osadzone obrazy?
Uzyskaj dostęp do kolekcji obrazów: prs.images zwraca ImageCollection. Każdy obraz posiada właściwość content_type i bytes do odczytu surowych danych obrazu.
Czy ładowanie z pamięciowego strumienia jest obsługiwane?
Ładowanie bezpośrednio z io.BytesIO nie jest udostępnione w bieżącym API. Najpierw zapisz bajty do pliku tymczasowego:
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)