Как загружать презентации в Python

Как загружать презентации в Python

Aspose.Slides FOSS for Python lets you open any .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: Сохранение без потерь (round‑trip)

После просмотра или изменения презентации сохраните её обратно в 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) файлы не поддерживаются.

У фигур нет атрибута text_frame

Некоторые фигуры (Connectors, PictureFrames, GroupShapes) не имеют a text_frame. Защитите с помощью hasattr(shape, "text_frame") and shape.text_frame is not None перед доступом к тексту.


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

Сохраняет ли загрузка всё оригинальное содержимое?

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

Можно ли загрузить PPTX, защищённый паролем?

Презентации, защищённые паролем (зашифрованные), не поддерживаются в этой версии.

Можно ли извлечь встроенные изображения?

Получите доступ к коллекции изображений: prs.images возвращает the 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)

См. также

 Русский