Как загружать презентации в Python
Aspose.Slides FOSS for Python позволяет открыть любой файл .pptx, просмотреть его содержимое и либо сохранить его обратно в PPTX, либо извлечь из него данные. Это руководство охватывает открытие файла, перебор слайдов, чтение текста фигур и сохранение с обратным преобразованием.
Пошаговое руководство
Шаг 1: Установить пакет
pip install aspose-slides-fossШаг 2: Открыть существующую презентацию
Передайте путь к файлу в slides.Presentation(). Используйте менеджер контекста, чтобы обеспечить очистку.
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)Неизвестные XML‑части в исходном файле сохраняются дословно: библиотека никогда не удаляет содержимое, которое она ещё не понимает.
Шаг 3: Просмотр слайдов
Переберите все слайды и выведите их индекс:
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")Шаг 4: Чтение текста формы
Перебрать фигуры и прочитать текст из фигур, содержащих 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}")Шаг 5: Чтение свойств документа
Получить основные свойства документа из 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}")Шаг 6: Сохранение в обратном порядке
После проверки или изменения презентации сохраните её обратно в PPTX:
prs.save("output.pptx", SaveFormat.PPTX)Сохранение в другой путь создаёт новый файл. Сохранение в тот же путь перезаписывает оригинал.
Общие проблемы и решения
FileNotFoundError
Проверьте, что путь к файлу .pptx корректен относительно рабочей директории. Используйте pathlib.Path для надёжного построения пути:
from pathlib import Path
path = Path(__file__).parent / "assets" / "deck.pptx"
with slides.Presentation(str(path)) as prs:
...Exception: File format is not supported
Библиотека поддерживает только .pptx (Office Open XML). Файлы старого формата .ppt (binary PowerPoint 97–2003) не поддерживаются.
У объектов Shape нет атрибута text_frame
Некоторые фигуры (Connectors, PictureFrames, GroupShapes) не имеют text_frame. Защитите доступ к тексту с помощью hasattr(shape, "text_frame") and shape.text_frame is not None.
Часто задаваемые вопросы
Сохраняет ли загрузка весь оригинальный контент?
Да. Неизвестные части XML сохраняются дословно при обратном сохранении. Библиотека не будет удалять любой XML‑контент, который она ещё не понимает.
Могу ли я загрузить PPTX, защищённый паролем?
Презентации, защищённые паролем (зашифрованные), не поддерживаются в этой версии.
Могу ли я извлечь встроенные изображения?
Получите доступ к коллекции изображений: prs.images возвращает ImageCollection. У каждого изображения есть свойства content_type и bytes для чтения необработанных данных изображения.
Поддерживается ли загрузка из потока в памяти?
Прямая загрузка из io.BytesIO не доступна в текущем API. Сначала запишите байты во временный файл:
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)