Jak zapisywać prezentacje w Python
Aspose.Slides FOSS for Python saves presentations exclusively to .pptx format używając prs.save(path, SaveFormat.PPTX). Ten przewodnik opisuje prawidłowy wzorzec zapisu, zapisywanie do innej ścieżki oraz typowe błędy związane z zapisem.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
pip install aspose-slides-fossKrok 2: Otwórz lub utwórz prezentację
Zawsze używaj menedżera kontekstu. Wywołanie zapisu musi odbywać się wewnątrz with bloku.
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
# Create new
with slides.Presentation() as prs:
prs.save("new.pptx", SaveFormat.PPTX)
# Open existing
with slides.Presentation("input.pptx") as prs:
prs.save("output.pptx", SaveFormat.PPTX)Krok 3: Zapisz na końcu with Bloku
Umieść save() wywołanie jako ostatnie polecenie wewnątrz with bloku, po zakończeniu wszystkich modyfikacji.
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]
shape = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 300, 100)
shape.add_text_frame("Hello, World!")
prs.save("output.pptx", SaveFormat.PPTX)Krok 4: Zapisz do innej ścieżki
Podaj inną ścieżkę wyjściową, aby utworzyć nowy plik bez modyfikacji oryginału:
with slides.Presentation("template.pptx") as prs:
# modify ...
prs.save("customized.pptx", SaveFormat.PPTX)Ten template.pptx plik nie jest modyfikowany; customized.pptx jest tworzony (lub nadpisywany, jeśli już istnieje).
Krok 5: Zweryfikuj wynik
Po with po wyjściu z bloku plik jest kompletny i zamknięty. Sprawdź, czy istnieje:
import os
from pathlib import Path
output = Path("output.pptx")
print(f"Saved: {output.exists()}, size: {output.stat().st_size} bytes")Obsługiwany format zapisu
| Format | Wartość wyliczenia | Obsługiwane |
|---|---|---|
| PPTX (Office Open XML) | SaveFormat.PPTX | Tak |
| N/A | Nie | |
| HTML | N/A | Nie |
| SVG | N/A | Nie |
| PNG / JPEG | N/A | Nie |
| ODP (OpenDocument) | N/A | Nie |
Obsługiwany jest tylko format PPTX. Próba zapisania w innym formacie spowoduje NotImplementedError lub błąd nieobsługiwanego formatu.
Typowe problemy i rozwiązania
PermissionError: [Errno 13] Permission denied
Plik wyjściowy jest otwarty w innym programie (np. PowerPoint ma otwarty plik). Zamknij plik w innych aplikacjach przed zapisem.
Plik został utworzony, ale wydaje się pusty lub uszkodzony
Upewnij się prs.save() jest wywoływane wewnątrz with bloku, nie po nim. Po with wyjściu z bloku, Presentation obiekt jest zwalniany, a kolejne wywołania zakończą się cicho lub spowodują błąd.
NotImplementedError przy zapisywaniu
Dzieje się to, gdy próbuje się zapisać w formacie innym niż PPTX lub używa nieobsługiwanej funkcji (takiej jak wykresy lub animacje) podczas zapisu.
Najczęściej zadawane pytania
Czy mogę zapisać do tego samego pliku, który otworzyłem?
Tak. Zapis do tej samej ścieżki nadpisuje oryginalny plik:
with slides.Presentation("deck.pptx") as prs:
# modify ...
prs.save("deck.pptx", SaveFormat.PPTX) # overwrites originalCzy mogę zapisać do bufora bajtów zamiast do pliku?
Tak. Przekaż io.BytesIO obiekt bezpośrednio do prs.save() — akceptuje dowolny BinaryIO cel:
import io
import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
buf = io.BytesIO()
with slides.Presentation() as prs:
# ... modify presentation ...
prs.save(buf, SaveFormat.PPTX)
pptx_bytes = buf.getvalue()Czy zapis zachowuje zawartość, której nie zmodyfikowałem?
Tak. Nieznane części XML z oryginalnego pliku są zachowywane wprost. Biblioteka serializuje tylko te części modelu dokumentu, które rozumie, a pozostałe XML‑y przepuszcza dalej.