Как сохранять презентации в Python

Как сохранять презентации в Python

Aspose.Slides FOSS for Python saves presentations exclusively to .pptx формат, используя prs.save(path, SaveFormat.PPTX). Это руководство охватывает правильный шаблон сохранения, сохранение в другой путь и распространённые ошибки, связанные с сохранением.

Пошаговое руководство

Шаг 1: Установите пакет

pip install aspose-slides-foss

Шаг 2: Откройте или создайте презентацию

Всегда используйте менеджер контекста. Вызов сохранения должен происходить внутри with блока.

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)

Шаг 3: Сохранить в конце with Блока

Разместите save() вызов как последнее выражение внутри the with блок, после завершения всех модификаций.

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)

Шаг 4: Сохраните в другой путь

Укажите другой путь вывода, чтобы создать новый файл без изменения оригинала:

with slides.Presentation("template.pptx") as prs:
    # modify ...
    prs.save("customized.pptx", SaveFormat.PPTX)

Эта template.pptx файл не изменён; customized.pptx создаётся (или перезаписывается, если уже существует).


Шаг 5: Проверьте результат

После with блок завершается, файл полностью сформирован и закрыт. Проверьте, что он существует:

import os
from pathlib import Path

output = Path("output.pptx")
print(f"Saved: {output.exists()}, size: {output.stat().st_size} bytes")

Поддерживаемый формат сохранения

ФорматЗначение перечисленияПоддерживается
PPTX (Office Open XML)SaveFormat.PPTXДа
PDFN/AНет
HTMLN/AНет
SVGN/AНет
PNG / JPEGN/AНет
ODP (OpenDocument)N/AНет

Поддерживается только PPTX. Попытка сохранить в любом другом формате вызовет NotImplementedError или ошибку неподдерживаемого формата.


Распространённые проблемы и их решения

PermissionError: [Errno 13] Permission denied

Выходной файл открыт в другом приложении (например, PowerPoint держит файл открытым). Закройте файл в других приложениях перед сохранением.

Файл создан, но выглядит пустым или повреждённым

Убедитесь prs.save() вызывается внутри with блока, а не после него. После with выхода из блока, Presentation объект освобождается, и последующие вызовы завершатся без сообщения об ошибке или вызовут ошибку.

NotImplementedError при сохранении

Это происходит при попытке сохранить в формате, отличном от PPTX, или при использовании неподдерживаемой функции (например, диаграмм или анимаций) во время сохранения.


Часто задаваемые вопросы

Могу ли я сохранить в тот же файл, который открыл?

Да. Сохранение в тот же путь перезаписывает оригинальный файл:

with slides.Presentation("deck.pptx") as prs:
    # modify ...
    prs.save("deck.pptx", SaveFormat.PPTX)  # overwrites original

Могу ли я сохранить в буфер байтов вместо файла?

Да. Передайте io.BytesIO объект напрямую в prs.save() — он принимает любой BinaryIO место назначения:

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

Сохраняет ли процесс сохранения содержимое, которое я не изменял?

Да. Неизвестные XML‑части из оригинального файла сохраняются дословно. Библиотека сериализует только те части модели документа, которые она понимает, а остальные XML‑данные пропускает без изменений.


См. также

 Русский