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

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

Aspose.Slides FOSS for Python позволяет создавать презентации PowerPoint полностью на Python без зависимости от Microsoft Office. Это руководство показывает, как создать новую презентацию, добавить слайды и фигуры, отформатировать текст и сохранить результат.

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

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

Установите Aspose.Slides FOSS из PyPI. Требуется Python 3.10 или более поздняя версия.

pip install aspose-slides-foss

Проверьте установку:

import aspose.slides_foss as slides
print("Aspose.Slides FOSS ready")

Зависимость lxml устанавливается автоматически. Другие системные пакеты не требуются.


Шаг 2: Импортировать необходимые модули

Импортируйте пакет и перечисление SaveFormat, необходимое для сохранения.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat
from aspose.slides_foss import ShapeType

Все константы типов фигур находятся в aspose.slides_foss.ShapeType. Все типы форматирования (FillType, NullableBool) также находятся в aspose.slides_foss.


Шаг 3: Создать презентацию

Используйте slides.Presentation() в качестве менеджера контекста. Новая презентация начинается с одного пустого слайда.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    print(f"Slides in new presentation: {len(prs.slides)}")
    # work with prs inside this block
    prs.save("output.pptx", SaveFormat.PPTX)

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


Шаг 4: Доступ к слайду

Первый слайд находится в индексе 0. Пустая презентация содержит ровно один слайд.

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]  # zero-based index
    print(f"Slide at index 0: {slide}")
    prs.save("output.pptx", SaveFormat.PPTX)

Шаг 5: Добавить форму

Используйте slide.shapes.add_auto_shape() для добавления AutoShape. Параметры (shape_type, x, y, width, height) указаны в пунктах (1 пункт = 1/72 дюйма; стандартный слайд — 720 × 540 пунктов).

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]

    # Rectangle at (50, 50) with 400 wide and 120 tall
    shape = slide.shapes.add_auto_shape(ShapeType.RECTANGLE, 50, 50, 400, 120)

    # Attach a text frame
    shape.add_text_frame("Hello from Aspose.Slides FOSS!")

    prs.save("with-shape.pptx", SaveFormat.PPTX)

Шаг 6: Сохранить презентацию

Вызовите prs.save(path, SaveFormat.PPTX) до выхода из блока with. PPTX — единственный поддерживаемый формат вывода.

prs.save("result.pptx", SaveFormat.PPTX)

Файл записывается атомарно; если ошибка происходит до этого вызова, файл вывода не создаётся.


Полный рабочий пример

Следующий скрипт создает презентацию из двух слайдов с фигурой заголовка на первом слайде и таблицей на втором.

import aspose.slides_foss as slides
from aspose.slides_foss import ShapeType, NullableBool, FillType
from aspose.slides_foss.drawing import Color
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    # --- Slide 1: title shape ---
    slide1 = prs.slides[0]
    title = slide1.shapes.add_auto_shape(ShapeType.RECTANGLE, 40, 40, 640, 80)
    tf = title.add_text_frame("Q1 Results: Executive Summary")
    fmt = tf.paragraphs[0].portions[0].portion_format
    fmt.font_height = 32
    fmt.font_bold = NullableBool.TRUE
    fmt.fill_format.fill_type = FillType.SOLID
    fmt.fill_format.solid_fill_color.color = Color.from_argb(255, 0, 70, 127)

    # --- Slide 2: table ---
    prs.slides.add_empty_slide(prs.layout_slides[0])
    slide2 = prs.slides[1]
    table = slide2.shapes.add_table(40, 40, [200.0, 120.0, 120.0], [40.0, 40.0, 40.0])
    headers = ["Region", "Revenue", "Growth"]
    data = [
        ["North", "$1.2M", "+8%"],
        ["South", "$0.9M", "+4%"],
    ]
    for col, header in enumerate(headers):
        table.rows[0][col].text_frame.text = header
    for row_idx, row_data in enumerate(data):
        for col, cell_text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = cell_text

    prs.save("q1-results.pptx", SaveFormat.PPTX)

print("Saved q1-results.pptx")

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

ResourceWarning: unclosed Presentation

Вы создаёте экземпляр Presentation без блока with. Всегда используйте:

with slides.Presentation() as prs:
    ...

AttributeError: __enter__

Если вы видите эту ошибку, проверьте, что импортировали aspose.slides_foss (а не aspose.slides). Имя пакета на PyPI — aspose-slides-foss, а импорт во время выполнения — aspose.slides_foss.

TypeError: SaveFormat.PPTX is not callable

SaveFormat.PPTX является членом перечисления, а не функцией. Используйте его как prs.save("file.pptx", SaveFormat.PPTX).


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

Какой размер слайда по умолчанию?

Новый Presentation() создает слайды стандартного размера 10 × 7,5 дюйма (720 × 540 пунктов). Изменение размера слайда пока не поддерживается в этой версии.

Могу ли я добавить более одного слайда?

Да. Вызовите prs.slides.add_empty_slide(prs.layout_slides[0]), чтобы добавить пустой слайд и получить к нему доступ по индексу:

prs.slides.add_empty_slide(prs.layout_slides[0])
slide2 = prs.slides[1]

Могу ли я открыть существующий файл и добавить слайды?

Да:

with slides.Presentation("existing.pptx") as prs:
    prs.slides.add_empty_slide(prs.layout_slides[0])
    prs.save("existing.pptx", SaveFormat.PPTX)

В какие форматы я могу сохранять?

Поддерживается только SaveFormat.PPTX. Экспорт в PDF, HTML, SVG или изображения недоступен в этой версии.


См. также

 Русский