Управление переходами между слайдами в презентациях с помощью Java

Обзор

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

Добавление перехода между слайдами

Чтобы применить переход, загрузите презентацию с помощью класса Презентация и получите доступ к настройкам перехода слайда через getSlideShowTransition. Используйте setType с значением из перечисления TransitionType, затем сохраните презентацию.

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        presentation.getSlides().get_Item(0).getSlideShowTransition().setType(TransitionType.Circle);
        presentation.getSlides().get_Item(1).getSlideShowTransition().setType(TransitionType.Comb);

        presentation.save("slide-transitions.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

Добавление расширенного перехода между слайдами

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

  • setAdvanceOnClick позволяет зрителю перейти к следующему слайду при щелчке мышью.
  • setAdvanceAfter включает автоматическое переключение.
  • setAdvanceAfterTime устанавливает задержку перед автоматическим переключением в миллисекундах.

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 3) {
        ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
        firstTransition.setType(TransitionType.Circle);
        firstTransition.setAdvanceOnClick(true);
        firstTransition.setAdvanceAfter(true);
        firstTransition.setAdvanceAfterTime(3000);

        ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        secondTransition.setType(TransitionType.Comb);
        secondTransition.setAdvanceOnClick(true);
        secondTransition.setAdvanceAfter(true);
        secondTransition.setAdvanceAfterTime(5000);

        ISlideShowTransition thirdTransition = presentation.getSlides().get_Item(2).getSlideShowTransition();
        thirdTransition.setType(TransitionType.Zoom);
        thirdTransition.setAdvanceOnClick(true);
        thirdTransition.setAdvanceAfter(true);
        thirdTransition.setAdvanceAfterTime(7000);

        presentation.save("advanced-transitions.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least three slides.");
    }
} finally {
    presentation.dispose();
}

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("advanced-transitions.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();

        if (transition.getAdvanceAfter()) {
            System.out.println("Slide " + slide.getSlideNumber() + ": advance after " + transition.getAdvanceAfterTime() + " ms.");

            if (transition.getAdvanceAfterTime() > 2000) {
                transition.setAdvanceAfter(false);
                transition.setAdvanceOnClick(true);
            }
        }
    }

    presentation.save("adjusted-transitions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Точное управление временем перехода

Используйте setDuration для указания точной продолжительности эффекта перехода в миллисекундах. Метод getSlideShowTransition слайда предоставляет эти настройки через ISlideShowTransition:

Метод Назначение
setDuration Устанавливает длительность самого эффекта перехода в миллисекундах.
setAdvanceAfterTime Устанавливает задержку перед автоматическим переключением слайда в миллисекундах. Передайте true в setAdvanceAfter, чтобы активировать этот таймер.
setSpeed Выбирает предопределённую категорию скорости из TransitionSpeed: Slow, Medium или Fast. Используется, когда точная длительность не указана.

[setDuration] управляет только эффектом перехода; она не определяет, как долго слайд остаётся видимым. Задержку автоматического переключения настраивают отдельно. Если явная длительность не задана, Aspose.Slides определяет длительность эффекта исходя из типа перехода и значения getSpeed.

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();
        transition.setType(TransitionType.Fade);
        transition.setDuration(750);

        // Настройте автоматическое переключение независимо от длительности эффекта.
        transition.setAdvanceAfter(true);
        transition.setAdvanceAfterTime(5000);
        transition.setAdvanceOnClick(false);
    }

    presentation.save("precise-transitions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
        firstTransition.setType(TransitionType.Fade);
        firstTransition.setDuration(500);

        ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        secondTransition.setType(TransitionType.Push);
        secondTransition.setDuration(1200);

        presentation.save("individual-transition-durations.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

Координация переходов с анимированным выводом

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

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

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();
        int duration = transition.getDuration();

        if (duration >= 0) {
            System.out.println("Slide " + slide.getSlideNumber() + ": stored transition duration is " + duration + " ms.");
        } else {
            System.out.println("Slide " + slide.getSlideNumber() + ": no explicit duration; timing depends on transition type " + transition.getType() + " and speed " + transition.getSpeed() + ".");
        }
    }
} finally {
    presentation.dispose();
}

Переход Morph

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide firstSlide = presentation.getSlides().get_Item(0);
    IAutoShape rectangle = firstSlide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 100);
    rectangle.getTextFrame().setText("Morph transition");

    ISlide secondSlide = presentation.getSlides().addClone(firstSlide);
    IShape movedRectangle = secondSlide.getShapes().get_Item(0);
    movedRectangle.setX(movedRectangle.getX() + 100);
    movedRectangle.setY(movedRectangle.getY() + 50);
    movedRectangle.setWidth(movedRectangle.getWidth() - 200);
    movedRectangle.setHeight(movedRectangle.getHeight() - 10);

    secondSlide.getSlideShowTransition().setType(TransitionType.Morph);

    presentation.save("morph-transition.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

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

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

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

Используйте setType для выбора Morph перед вызовом getValue. Полученное значение предоставляет интерфейс IMorphTransition, метод setMorphType которого выбирает режим сопоставления.

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("morph-transition.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        ISlideShowTransition transition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        transition.setType(TransitionType.Morph);
        ITransitionValueBase transitionValue = transition.getValue();

        if (transitionValue instanceof IMorphTransition) {
            IMorphTransition morphTransition = (IMorphTransition) transitionValue;
            morphTransition.setMorphType(TransitionMorphType.ByWord);
            presentation.save("morph-by-word.pptx", SaveFormat.Pptx);
        } else {
            System.out.println("Morph transition options are unavailable.");
        }
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

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

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

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

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    ISlideShowTransition transition = presentation.getSlides().get_Item(0).getSlideShowTransition();
    transition.setType(TransitionType.Cut);
    ITransitionValueBase transitionValue = transition.getValue();

    if (transitionValue instanceof IOptionalBlackTransition) {
        IOptionalBlackTransition cutTransition = (IOptionalBlackTransition) transitionValue;
        cutTransition.setFromBlack(true);
        presentation.save("cut-from-black.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("Cut transition options are unavailable.");
    }
} finally {
    presentation.dispose();
}

FAQ

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

Да. Предпочтительно используйте setDuration, когда требуется точная длительность эффекта в миллисекундах. Используйте setSpeed, когда достаточно предопределённой категории TransitionSpeed — Slow, Medium или Fast, и явная длительность не задаётся. Эти настройки управляют эффектом перехода независимо от задержки автоматического переключения.

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

Да. Назначьте встроенный звук с помощью setSound, передайте значение StartSound из перечисления TransitionSoundMode в setSoundMode, и включите setSoundLoop со значением true. Звук будет зацикливаться до следующего звукового события в показе.

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

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

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

Вызовите getType у результата getSlideShowTransition слайда. Он возвращает значение из перечисления TransitionType; None означает, что переход не применён.