Управление переходами слайдов в презентациях с использованием Python

Обзор

Переходы слайдов определяют, как слайды появляются во время показа слайдов. С помощью Aspose.Slides for Python via .NET вы можете выбирать эффект перехода для каждого слайда, настраивать переход по щелчку мыши или таймеру и изменять параметры, специфичные для эффекта. В этой статье используются примеры на Python для применения переходов, установки точных длительностей переходов, управления временем отображения слайда и создания перехода Morph между двумя слайдами. Примеры также показывают, как сохранять настройки в файл PPTX.

Добавить переход слайда

Чтобы применить переход, загрузите презентацию с помощью класса Presentation и получите доступ к свойству slide_show_transition слайда. Установите его type в значение из перечисления TransitionType, затем сохраните презентацию.

В следующем примере к первому слайду применяется переход Circle, а ко второму — переход Comb. Используйте файл input.pptx с как минимум двумя слайдами.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    if len(presentation.slides) >= 2:
        presentation.slides[0].slide_show_transition.type = slides.slideshow.TransitionType.CIRCLE
        presentation.slides[1].slide_show_transition.type = slides.slideshow.TransitionType.COMB

        presentation.save("slide-transitions.pptx", slides.export.SaveFormat.PPTX)
    else:
        print("The input presentation must contain at least two slides.")

Добавить расширенный переход слайда

Вы можете настроить, как долго слайд остаётся на экране и будет ли щелчок мыши переключать показ слайдов. Следующие свойства управляют этим поведением:

  • advance_on_click позволяет зрителю переходить по щелчку мыши.
  • advance_after включаёт автоматический переход.
  • advance_after_time задаёт задержку перед автоматическим переходом, в миллисекундах.

Включите как щелчок, так и таймер, чтобы зритель мог перейти по щелчку или ждать таймера. Чтобы использовать только таймер, установите advance_on_click в False. Задержка определяет, когда показывается следующий слайд; она не задаёт длительность визуального эффекта перехода.

В этом примере первым трём слайдам назначаются разные эффекты, а автоматический переход включается через 3, 5 и 7 секунд соответственно. Щелчки мыши также могут переключать эти слайды. Используйте файл input.pptx с как минимум тремя слайдами.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    if len(presentation.slides) >= 3:
        first_transition = presentation.slides[0].slide_show_transition
        first_transition.type = slides.slideshow.TransitionType.CIRCLE
        first_transition.advance_on_click = True
        first_transition.advance_after = True
        first_transition.advance_after_time = 3000

        second_transition = presentation.slides[1].slide_show_transition
        second_transition.type = slides.slideshow.TransitionType.COMB
        second_transition.advance_on_click = True
        second_transition.advance_after = True
        second_transition.advance_after_time = 5000

        third_transition = presentation.slides[2].slide_show_transition
        third_transition.type = slides.slideshow.TransitionType.ZOOM
        third_transition.advance_on_click = True
        third_transition.advance_after = True
        third_transition.advance_after_time = 7000

        presentation.save("advanced-transitions.pptx", slides.export.SaveFormat.PPTX)
    else:
        print("The input presentation must contain at least three slides.")

Чтобы проверить, включён ли таймер автоматического перехода, прочитайте advance_after. Хранё­тая задержка сама по себе не указывает, активен ли таймер.

Следующий пример открывает файл, сохранённый выше, сообщает о каждом включённом таймере и отключает автоматический переход для слайдов с задержкой более двух секунд. Для этих слайдов включается переход по щелчку, после чего обновлённые настройки сохраняются.

import aspose.slides as slides

with slides.Presentation("advanced-transitions.pptx") as presentation:
    for slide in presentation.slides:
        transition = slide.slide_show_transition

        if transition.advance_after:
            print(f"Slide {slide.slide_number}: advance after {transition.advance_after_time} ms.")

            if transition.advance_after_time > 2000:
                transition.advance_after = False
                transition.advance_on_click = True

    presentation.save("adjusted-transitions.pptx", slides.export.SaveFormat.PPTX)

Точно контролировать время перехода

Используйте duration для указания точной длительности эффекта перехода в миллисекундах. Свойство slide_show_transition слайда раскрывает эти параметры через SlideShowTransition:

Свойство Назначение
duration Устанавливает длительность самого эффекта перехода в миллисекундах.
advance_after_time Устанавливает задержку перед автоматическим переходом слайда, в миллисекундах. Включите advance_after чтобы активировать этот таймер.
speed Выбирает предопределённую категорию скорости из TransitionSpeed: SLOW, MEDIUM или FAST. Используется, когда точная длительность не указана.

duration контролирует только эффект перехода; она не определяет, как долго слайд остаётся видимым. Настройте задержку автоматического перехода отдельно. Если явная длительность не задана, Aspose.Slides определяет её исходя из типа перехода и значения speed.

Применить одинаковую длительность ко всем слайдам

Для согласованного темпа примените один и тот же эффект и точную длительность к каждому слайду. Этот пример загружает input.pptx, выбирает Fade из TransitionType и задаёт каждой смене длительность 750 мс. Отдельно включается автоматический переход через 5 000 мс и отключается переход по щелчку мыши, после чего результат сохраняется как PPTX.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    for slide in presentation.slides:
        transition = slide.slide_show_transition
        transition.type = slides.slideshow.TransitionType.FADE
        transition.duration = 750

        # Настройте автоматическое продвижение независимо от длительности эффекта.
        transition.advance_after = True
        transition.advance_after_time = 5000
        transition.advance_on_click = False

    presentation.save("precise-transitions.pptx", slides.export.SaveFormat.PPTX)

Установить разные длительности для отдельных слайдов

Разные слайды могут использовать разные длительности эффектов. Например, можно задать короткий переход для титульного слайда и более длительный для вводного раздела. Этот пример задаёт 500 мс для первого слайда и 1 200 мс для второго. Используйте файл input.pptx с как минимум двумя слайдами.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    if len(presentation.slides) >= 2:
        first_transition = presentation.slides[0].slide_show_transition
        first_transition.type = slides.slideshow.TransitionType.FADE
        first_transition.duration = 500

        second_transition = presentation.slides[1].slide_show_transition
        second_transition.type = slides.slideshow.TransitionType.PUSH
        second_transition.duration = 1200

        presentation.save("individual-transition-durations.pptx", slides.export.SaveFormat.PPTX)
    else:
        print("The input presentation must contain at least two slides.")

Координировать переходы с анимированным выводом

При подготовке animated GIF, HTML5 presentation или video задавайте точные длительности переходов до экспорта, чтобы они соответствовали нужному темпу. Например, используйте 600‑миллисекундный fade между сценами и отдельно корректируйте задержку перехода каждого слайда, чтобы было время для озвучивания или контента.

Для GIF и видео согласуйте частоту кадров вывода с длительностью эффекта: 600 мс соответствует 18 кадрам при 30 кадрах в секунду. В HTML5 включите анимированные переходы в настройках экспорта. Проверьте поддерживаемые эффекты и параметры тайминга выбранного формата и предварительно просмотрите вывод для подтверждения синхронизации.

Прочитать существующую длительность перехода

Прочитайте duration перед изменением перехода, чтобы определить, сохранено ли явное значение. Значение -1 означает, что явная длительность не установлена; неотрицательное значение указывает сохранённую длительность в миллисекундах. Неустановленное значение не является вычисленной длительностью воспроизведения: Aspose.Slides использует тип перехода и speed для её определения. Установка типа перехода может инициализировать длительность, поэтому сначала проверьте исходные настройки.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    for slide in presentation.slides:
        transition = slide.slide_show_transition
        duration = transition.duration

        if duration >= 0:
            print(f"Slide {slide.slide_number}: stored transition duration is {duration} ms.")
        else:
            print(f"Slide {slide.slide_number}: no explicit duration; timing depends on {transition.type} and {transition.speed}.")

Переход Morph

Переход Morph анимирует изменения между объектами на соседних слайдах. Чтобы создать простой эффект Morph, клонируйте слайд, переместите или измените размер объекта на клоне и примените переход Morph ко второму слайду. Это даёт анимацию соответствующих объектов между их исходным и изменённым состояниями.

В следующем примере создаётся слайд с текстовым прямоугольником, клонируется, и на клоне изменяются позиция и размер прямоугольника. Затем для второго слайда выбирается Morph из перечисления TransitionType. Откройте сохранённый файл в программе просмотра презентаций, поддерживающей Morph, чтобы увидеть эффект во время показа.

import aspose.slides as slides

with slides.Presentation() as presentation:
    first_slide = presentation.slides[0]
    rectangle = first_slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 400, 100)
    rectangle.text_frame.text = "Morph transition"

    second_slide = presentation.slides.add_clone(first_slide)
    moved_rectangle = second_slide.shapes[0]
    moved_rectangle.x += 100
    moved_rectangle.y += 50
    moved_rectangle.width -= 200
    moved_rectangle.height -= 10

    second_slide.slide_show_transition.type = slides.slideshow.TransitionType.MORPH

    presentation.save("morph-transition.pptx", slides.export.SaveFormat.PPTX)

Типы перехода Morph

Перечисление TransitionMorphType определяет, как Morph сопоставляет и анимирует содержимое:

  • BY_OBJECT рассматривает каждую форму как целый объект.
  • BY_WORD анимирует текст, сопоставляя слова там, где это возможно.
  • BY_CHAR анимирует текст, сопоставляя символы там, где это возможно.

Установите переход type в Morph перед доступом к его value. Затем свойство morph_type объекта MorphTransition выбирает режим сопоставления.

В этом примере открывается презентация, созданная в предыдущем разделе, и настраивается второй слайд для анимации Morph по словам.

import aspose.slides as slides

with slides.Presentation("morph-transition.pptx") as presentation:
    if len(presentation.slides) >= 2:
        transition = presentation.slides[1].slide_show_transition
        transition.type = slides.slideshow.TransitionType.MORPH
        morph_transition = transition.value

        if isinstance(morph_transition, slides.slideshow.MorphTransition):
            morph_transition.morph_type = slides.slideshow.TransitionMorphType.BY_WORD
            presentation.save("morph-by-word.pptx", slides.export.SaveFormat.PPTX)
        else:
            print("Morph transition options are unavailable.")
    else:
        print("The input presentation must contain at least two slides.")

Установить эффекты перехода

Некоторые переходы раскрывают дополнительные параметры, такие как направление или начало эффекта с чёрного экрана. Доступные параметры зависят от выбранного перехода type. Сначала задайте тип, затем используйте соответствующий объект перехода из его value.

В следующем примере применяется переход Cut к первому слайду input.pptx. Через OptionalBlackTransition устанавливается from_black, чтобы переход начинался с чёрного экрана.

import aspose.slides as slides

with slides.Presentation("input.pptx") as presentation:
    transition = presentation.slides[0].slide_show_transition
    transition.type = slides.slideshow.TransitionType.CUT
    cut_transition = transition.value

    if isinstance(cut_transition, slides.slideshow.OptionalBlackTransition):
        cut_transition.from_black = True
        presentation.save("cut-from-black.pptx", slides.export.SaveFormat.PPTX)
    else:
        print("Cut transition options are unavailable.")

FAQ

Могу ли я контролировать скорость воспроизведения перехода слайда?

Да. Предпочтительно используйте duration, когда нужна точная длительность эффекта в миллисекундах. Используйте speed, когда достаточно предопределённой категории TransitionSpeed — SLOW, MEDIUM или FAST, и явная длительность не задаётся. Эти настройки управляют эффектом перехода независимо от задержки автоматического перехода.

Могу ли я привязать аудио к переходу и заставить его зацикливаться?

Да. Назначьте встроенное аудио свойству sound, установите sound_mode в START_SOUND из перечисления TransitionSoundMode и включите sound_loop. Аудио будет повторяться до следующего звукового события в показе слайдов.

Какой самый быстрый способ применить один и тот же переход ко всем слайдам?

Пройдитесь по коллекции slides презентации и для каждого слайда задайте переходу type одинаковое значение. В том же цикле задайте любые параметры тайминга и эффекта, чтобы поведение было одинаковым на всех слайдах.

Как проверить, какой переход установлен на слайде?

Прочитайте свойство type у свойства slide_show_transition слайда. Оно возвращает значение из перечисления TransitionType; NONE означает, что переход не применён.