Verwalten von Folienübergängen in Präsentationen mit Python via Java

Übersicht

Folienübergänge steuern, wie Folien während einer Bildschirmpräsentation angezeigt werden. Mit Aspose.Slides für Python via Java können Sie für jede Folie einen Übergangseffekt auswählen, den Fortschritt per Mausklick oder Timer konfigurieren und optionsspezifische Einstellungen für einen Effekt anpassen. Dieser Artikel verwendet Python‑Beispiele, um Übergänge anzuwenden, genaue Übergangsdauern festzulegen, die Folienzeit zu verwalten und einen Morph‑Übergang zwischen zwei Folien zu erstellen. Die Beispiele zeigen außerdem, wie die Einstellungen in einer PPTX‑Datei gespeichert werden.

Folienübergang hinzufügen

Um einen Übergang anzuwenden, laden Sie eine Präsentation mit der Klasse Presentation und greifen über getSlideShowTransition auf die Übergangseinstellungen der Folie zu. Verwenden Sie setType mit einem Wert aus der Aufzählung TransitionType, und speichern Sie anschließend die Präsentation.

Das folgende Beispiel wendet einen Circle‑Übergang auf die erste Folie und einen Comb‑Übergang auf die zweite Folie an. Verwenden Sie eine input.pptx‑Datei mit mindestens zwei Folien.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType

presentation = 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:
        print("The input presentation must contain at least two slides.")
finally:
    presentation.dispose()

Erweiterten Folienübergang hinzufügen

Sie können festlegen, wie lange eine Folie auf dem Bildschirm bleibt und ob ein Mausklick die Bildschirmpräsentation fortsetzt. Die folgenden Methoden steuern dieses Verhalten:

Aktivieren Sie sowohl das Klicken als auch den zeitgesteuerten Fortschritt, damit der Betrachter entweder per Klick weitergeht oder auf den Timer wartet. Um nur den Timer zu verwenden, übergeben Sie False an setAdvanceOnClick. Die Verzögerung steuert, wann die Präsentation fortschreitet; sie legt nicht die Dauer des visuellen Übergangseffekts fest.

Dieses Beispiel weist den ersten drei Folien unterschiedliche Effekte zu und aktiviert das automatische Voranschreiten nach 3, 5 bzw. 7 Sekunden. Mausklicks können diese Folien ebenfalls vorwärts schalten. Verwenden Sie eine input.pptx‑Datei mit mindestens drei Folien.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType

presentation = Presentation("input.pptx")
try:
    if presentation.getSlides().size() >= 3:
        first_transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
        first_transition.setType(TransitionType.Circle)
        first_transition.setAdvanceOnClick(True)
        first_transition.setAdvanceAfter(True)
        first_transition.setAdvanceAfterTime(3000)

        second_transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
        second_transition.setType(TransitionType.Comb)
        second_transition.setAdvanceOnClick(True)
        second_transition.setAdvanceAfter(True)
        second_transition.setAdvanceAfterTime(5000)

        third_transition = presentation.getSlides().get_Item(2).getSlideShowTransition()
        third_transition.setType(TransitionType.Zoom)
        third_transition.setAdvanceOnClick(True)
        third_transition.setAdvanceAfter(True)
        third_transition.setAdvanceAfterTime(7000)

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

Um zu prüfen, ob das zeitgesteuerte Voranschreiten aktiviert ist, rufen Sie getAdvanceAfter auf. Ein gespeicherter Delay allein bedeutet nicht, dass der Timer aktiv ist.

Das folgende Beispiel öffnet die oben gespeicherte Datei, meldet jeden aktivierten Timer und deaktiviert das automatische Voranschreiten für Folien mit einer Verzögerung von mehr als zwei Sekunden. Es aktiviert Mausklicks für diese Folien und speichert die aktualisierten Einstellungen.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation("advanced-transitions.pptx")
try:
    for slide in presentation.getSlides():
        transition = slide.getSlideShowTransition()

        if transition.getAdvanceAfter():
            print(f"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()

Übergangszeit exakt steuern

Verwenden Sie setDuration, um die genaue Länge eines Übergangseffekts in Millisekunden festzulegen. Die Methode getSlideShowTransition der Folie stellt diese Einstellungen über SlideShowTransition bereit:

Methode Zweck
setDuration Legt die Dauer des Übergangseffekts selbst in Millisekunden fest.
setAdvanceAfterTime Legt die Verzögerung fest, bevor die Folie automatisch voranschreitet, in Millisekunden. Übergeben Sie True an setAdvanceAfter, um diesen Timer zu aktivieren.
setSpeed Wählt eine vordefinierte Geschwindigkeitskategorie aus TransitionSpeed: Slow, Medium oder Fast. Sie wird verwendet, wenn keine genaue Dauer angegeben ist.

setDuration steuert nur den Übergangseffekt; sie legt nicht fest, wie lange die Folie sichtbar bleibt. Konfigurieren Sie die automatische Voranschreitungsverzögerung separat. Wenn keine explizite Dauer festgelegt ist, ermittelt Aspose.Slides die Effektdauer aus dem Übergangstyp und dem Wert von getSpeed.

Gleiche Dauer auf jede Folie anwenden

Für ein gleichmäßiges Tempo wenden Sie für jede Folie denselben Effekt und dieselbe genaue Dauer an. Dieses Beispiel lädt input.pptx, wählt Fade aus TransitionType und gibt jedem Übergang eine Dauer von 750 Millisekunden. Es aktiviert separat das automatische Voranschreiten nach 5.000 Millisekunden und deaktiviert das Voranschreiten per Mausklick, anschließend wird das Ergebnis als PPTX gespeichert.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType

presentation = Presentation("input.pptx")
try:
    for slide in presentation.getSlides():
        transition = slide.getSlideShowTransition()
        transition.setType(TransitionType.Fade)
        transition.setDuration(750)

        # Automatisches Voranschreiten unabhängig von der Effektdauer konfigurieren.
        transition.setAdvanceAfter(True)
        transition.setAdvanceAfterTime(5000)
        transition.setAdvanceOnClick(False)

    presentation.save("precise-transitions.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Unterschiedliche Dauern für einzelne Folien festlegen

Verschiedene Folien können unterschiedliche Effektzeiten verwenden. Zum Beispiel einen kurzen Übergang für eine Titelfolie und einen längeren Übergang für eine Abschnittseinführung. Dieses Beispiel legt 500 Millisekunden für die erste Folie und 1.200 Millisekunden für die zweite fest. Verwenden Sie eine input.pptx‑Datei mit mindestens zwei Folien.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType

presentation = Presentation("input.pptx")
try:
    if presentation.getSlides().size() >= 2:
        first_transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
        first_transition.setType(TransitionType.Fade)
        first_transition.setDuration(500)

        second_transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
        second_transition.setType(TransitionType.Push)
        second_transition.setDuration(1200)

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

Übergänge mit animierter Ausgabe koordinieren

Wenn Sie ein animiertes GIF, eine HTML5-Präsentation oder ein Video vorbereiten, setzen Sie genaue Übergangsdauern vor dem Export, um das gewünschte Tempo zu erreichen. Verwenden Sie beispielsweise ein 600‑Millisekunden‑Fade zwischen Szenen und passen Sie die Voranschreitungsverzögerung jeder Folie separat an, um Zeit für die Erzählung oder den Inhalt zu lassen.

Für GIF und Video koordinieren Sie die Ausgaberate mit der Effektdauer: 600 Millisekunden entsprechen 18 Bildern bei 30 Bildern pro Sekunde. In HTML5 aktivieren Sie animierte Übergänge in den Exporteinstellungen. Prüfen Sie die unterstützten Effekte und Timing‑Optionen des gewählten Exportformats und sehen Sie sich eine Vorschau an, um die Synchronisation zu bestätigen.

Bestehende Übergangsdauer auslesen

Rufen Sie getDuration auf, bevor Sie den Übergang ändern, um festzustellen, ob ein expliziter Wert gespeichert ist. Ein Wert von -1 bedeutet, dass keine explizite Dauer festgelegt ist; ein nichtnegativer Wert gibt die gespeicherte Dauer in Millisekunden an. Der nicht gesetzte Wert ist nicht die berechnete Wiedergabedauer: Aspose.Slides verwendet den Übergangstyp und den Wert von getSpeed, um diese Dauer zu bestimmen. Das Festlegen eines Übergangstyps kann eine Dauer initialisieren, prüfen Sie daher zuerst die ursprünglichen Einstellungen.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("input.pptx")
try:
    for slide in presentation.getSlides():
        transition = slide.getSlideShowTransition()
        duration = transition.getDuration()

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

Morph‑Übergang

Der Morph‑Übergang animiert Änderungen zwischen Objekten auf aufeinanderfolgenden Folien. Um einen einfachen Morph‑Effekt zu erzeugen, duplizieren Sie eine Folie, verschieben oder skalieren ein Objekt auf der Kopie und wenden den Morph‑Übergang auf die zweite Folie an. Dadurch erhalten die entsprechenden Objekte einen Animationspfad zwischen ihrem ursprünglichen und modifizierten Zustand.

Das folgende Beispiel erstellt eine Folie mit einem Textrechteck, dupliziert die Folie und ändert die Position und Größe des Rechtecks in der Kopie. Anschließend wählt es Morph aus der Aufzählung TransitionType für die zweite Folie aus. Öffnen Sie die gespeicherte Datei in einem Präsentationsviewer, der Morph unterstützt, um den Effekt während einer Bildschirmpräsentation zu sehen.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType, ShapeType

presentation = Presentation()
try:
    first_slide = presentation.getSlides().get_Item(0)
    rectangle = first_slide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 100)
    rectangle.getTextFrame().setText("Morph transition")

    second_slide = presentation.getSlides().addClone(first_slide)
    moved_rectangle = second_slide.getShapes().get_Item(0)
    moved_rectangle.setX(moved_rectangle.getX() + 100)
    moved_rectangle.setY(moved_rectangle.getY() + 50)
    moved_rectangle.setWidth(moved_rectangle.getWidth() - 200)
    moved_rectangle.setHeight(moved_rectangle.getHeight() - 10)

    second_slide.getSlideShowTransition().setType(TransitionType.Morph)

    presentation.save("morph-transition.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

Morph‑Übergangstypen

Die Aufzählung TransitionMorphType steuert, wie Morph Inhalte abgleicht und animiert:

  • ByObject behandelt jede Form als ein komplettes Objekt.
  • ByWord animiert Text, indem nach Möglichkeit Wörter abgeglichen werden.
  • ByChar animiert Text, indem nach Möglichkeit Zeichen abgeglichen werden.

Verwenden Sie setType, um Morph auszuwählen, bevor Sie getValue aufrufen. Der zurückgegebene Wert ist dann eine Instanz der Klasse MorphTransition, deren Methode setMorphType den Abgleichmodus auswählt.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType, TransitionMorphType, MorphTransition

presentation = Presentation("morph-transition.pptx")
try:
    if presentation.getSlides().size() >= 2:
        transition = presentation.getSlides().get_Item(1).getSlideShowTransition()
        transition.setType(TransitionType.Morph)
        transition_value = transition.getValue()

        if isinstance(transition_value, MorphTransition):
            morph_transition = transition_value
            morph_transition.setMorphType(TransitionMorphType.ByWord)
            presentation.save("morph-by-word.pptx", SaveFormat.Pptx)
        else:
            print("Morph transition options are unavailable.")
    else:
        print("The input presentation must contain at least two slides.")
finally:
    presentation.dispose()

Übergangseffekte festlegen

Einige Übergänge bieten zusätzliche Optionen, z. B. Richtung oder ob der Effekt von einem schwarzen Bildschirm startet. Die verfügbaren Optionen hängen vom mit setType gewählten Übergang ab. Legen Sie zuerst den Typ fest und verwenden Sie dann die passende Klasse aus getValue.

Das folgende Beispiel wendet einen Cut‑Übergang auf die erste Folie von input.pptx an. Es ruft setFromBlack über OptionalBlackTransition auf, damit der Übergang von einem schwarzen Bildschirm startet.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, TransitionType, OptionalBlackTransition

presentation = Presentation("input.pptx")
try:
    transition = presentation.getSlides().get_Item(0).getSlideShowTransition()
    transition.setType(TransitionType.Cut)
    transition_value = transition.getValue()

    if isinstance(transition_value, OptionalBlackTransition):
        cut_transition = transition_value
        cut_transition.setFromBlack(True)
        presentation.save("cut-from-black.pptx", SaveFormat.Pptx)
    else:
        print("Cut transition options are unavailable.")
finally:
    presentation.dispose()

FAQ

Kann ich die Wiedergabegeschwindigkeit eines Folienübergangs steuern?

Ja. Verwenden Sie setDuration, wenn Sie eine genaue Effektdauer in Millisekunden benötigen. Nutzen Sie setSpeed, wenn eine vordefinierte Kategorie aus TransitionSpeed – Slow, Medium oder Fast – ausreicht und keine explizite Dauer festgelegt ist. Diese Einstellungen steuern den Übergangseffekt unabhängig von der automatischen Voranschreitungsverzögerung.

Kann ich einer Transition Audio anhängen und es wiederholen lassen?

Ja. Weisen Sie eingebettetes Audio mit setSound zu, übergeben Sie StartSound aus der Aufzählung TransitionSoundMode an setSoundMode, und aktivieren Sie setSoundLoop mit True. Das Audio wiederholt sich, bis das nächste Tonevent in der Präsentation eintritt.

Wie kann ich am schnellsten denselben Übergang auf jede Folie anwenden?

Durchlaufen Sie die getSlides-Sammlung der Präsentation und rufen Sie für jeden Folienübergang setType mit demselben Wert auf. Legen Sie alle Timing‑ und Effektoptionen im selben Durchlauf fest, um das Verhalten über alle Folien hinweg konsistent zu halten.

Wie kann ich prüfen, welcher Übergang derzeit auf einer Folie eingestellt ist?

Rufen Sie getType auf dem Ergebnis von getSlideShowTransition der Folie auf. Es gibt einen Wert aus der Aufzählung TransitionType zurück; None_ bedeutet, dass kein Übergangseffekt angewendet ist.