Diaátmenetek kezelése prezentációkban Python via Java segítségével

Áttekintés

A diavetítés átmenetek szabályozzák, hogyan jelennek meg a diák egy diavetítés során. Az Aspose.Slides for Python via Java segítségével minden diára kiválaszthat egy átmenet‑effektust, beállíthatja a léptetést egérkattintással vagy időzítéssel, és módosíthatja az effektusra jellemző beállításokat. Ez a cikk Python példákat használ az átmenetek alkalmazására, pontos átmenet‑idők beállítására, a diák időzítésének kezelésére, valamint egy Morph átmenet létrehozására két dia között. A példák azt is bemutatják, hogyan menthetőek a beállítások PPTX fájlba.

Átmenet hozzáadása diához

Átmenet alkalmazásához töltse be a bemutatót a Presentation osztállyal, és érje el a dia átmeneti beállításait a getSlideShowTransition segítségével. Használja a setType metódust a TransitionType enumeráció egy értékével, majd mentse a bemutatót.

Az alábbi példa Circle átmenetet alkalmaz az első diára és Comb átmenetet a másodikra. Használjon egy input.pptx fájlt, amely legalább két diát tartalmaz.

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()

Speciális átmenet hozzáadása diához

Beállíthatja, hogy a dia mennyi ideig maradjon a képernyőn, és hogy egérkattintás lépteti‑e a diavetítést. A következő metódusok vezérlik ezt a viselkedést:

Engedélyezze mind a kattintást, mind az időzített előrehaladást, így a néző kattintással vagy a várakozással léphet tovább. Ha csak az időzítőt szeretné használni, adjon át False értéket a setAdvanceOnClick metódusnak. A késleltetés azt szabályozza, mikor lép tovább a diavetítés; nem a vizuális átmenet időtartamát állítja be.

Ez a példa különböző effektusokat rendel az első három diához, és automatikus előrehaladást állít be 3, 5 és 7 másodperc után. Egérkattintással is léptethetők ezek a diák. Használjon egy input.pptx fájlt, amely legalább három diát tartalmaz.

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()

Az időzített előrehaladás engedélyezésének ellenőrzéséhez hívja meg a getAdvanceAfter metódust. A tárolt késleltetés önmagában nem jelzi, hogy az időzítő aktív.

A következő példa megnyitja a fenti példában mentett fájlt, jelentést készít minden engedélyezett időzítőről, és letiltja az automatikus előrehaladást a két másodpercnél nagyobb késleltetésű diák esetén. Ezekhez a diákhoz engedélyezi az egérkattintást, majd elmenti a módosított beállításokat.

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()

Az átmenet időzítésének pontos szabályozása

Használja a setDuration metódust az átmenet‑effektus pontos hossza milliszekundumban történő megadásához. A dia getSlideShowTransition metódusa ezekkel a beállításokkal rendelkezik a SlideShowTransition osztályon keresztül:

Metódus Cél
setDuration Beállítja magának az átmenet‑effektusnak az időtartamát milliszekundumban.
setAdvanceAfterTime Beállítja az automatikus előrehaladás előtti késleltetést milliszekundumban. A setAdvanceAfter meghívásával aktiválható ez az időzítő.
setSpeed Kiválaszt egy előre definiált sebességkategóriát a TransitionSpeed enumerációból: Slow, Medium vagy Fast. Akkor használatos, ha nincs megadva pontos időtartam.

A setDuration csak az átmenet‑effektust befolyásolja; nem határozza meg, mennyi ideig marad a dia látható. Az automatikus előrehaladás késleltetését külön kell beállítani. Ha nincs kifejezett időtartam megadva, az Aspose.Slides a átmenet típusa és a getSpeed értéke alapján határozza meg az effektus időtartamát.

Azonos időtartam alkalmazása minden diára

A konzisztens tempó érdekében alkalmazzon ugyanazt az effektust és pontos időtartamot minden diára. Ez a példa betölti a input.pptx fájlt, kiválasztja a Fade átmenetet a TransitionType enumerációból, és minden átmenetnek 750 milliszekundumos időt állít be. Külön engedélyezi az automatikus előrehaladást 5 000 milliszekundum után, letiltja az egérkattintásos léptetést, majd az eredményt PPTX‑ként menti.

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)

        # Konfigurálja az automatikus előrehaladást az effektus időtartamától függetlenül.
        transition.setAdvanceAfter(True)
        transition.setAdvanceAfterTime(5000)
        transition.setAdvanceOnClick(False)

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

Eltérő időtartamok beállítása egyedi diákhoz

Különböző diák különböző effektus‑időket használhatnak. Például a címdiára rövid átmenetet, a szekcióbevezetőre hosszabbat alkalmazhat. Ez a példa 500 milliszekundumot állít be az első diára, és 1 200 milliszekundumot a másodikra. Használjon egy input.pptx fájlt, amely legalább két diát tartalmaz.

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()

Átmenetek összehangolása animált kimenettel

Amikor animált GIF, HTML5 prezentáció vagy videó exportál, állítsa be a pontos átmenet‑időket a kimenet előtt, hogy az ütem a kívánt legyen. Például használjon 600 milliszekundumos fade‑ot a jelenetek között, és külön állítsa be minden dia előrehaladási késleltetését a narráció vagy a tartalom időtartamának megfelelően.

GIF‑nél és videónál a kimeneti képkockasebességet hangolja az effektus időtartamához: 600 milliszekundum 30 fps‑nél 18 képkockának felel meg. HTML5‑ben engedélyezze az animált átmeneteket az exportbeállításokban. Ellenőrizze a kiválasztott exportformátum által támogatott effektusokat és időzítési lehetőségeket, és tekintse meg az előnézetet a szinkronizáció ellenőrzéséhez.

Meglévő átmenet‑idő kiolvasása

Módosítás előtt hívja meg a getDuration metódust, hogy megállapítsa, van‑e tárolt explicite érték. A -1 érték azt jelenti, hogy nincs megadva explicit időtartam; egy nem negatív érték a tárolt időt milliszekundumban adja vissza. A nem beállított érték nem a lejátszási idő, mivel az Aspose.Slides a TransitionType‑ból és a getSpeed értékéből számolja ki. Egy átmenettípus beállítása inicializálhat egy időtartamot, ezért először ellenőrizze az eredeti beállításokat.

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 átmenet

A Morph átmenet animálja a változásokat az egymást követő diák objektumai között. Egy egyszerű Morph effektus létrehozásához klónozzon egy diát, mozdítsa vagy méretezze át az objektumot a klónon, és alkalmazza a Morph átmenetet a második diára. Így a megfelelő objektumok animálódnak az eredeti és a módosított állapotuk között.

Az alábbi példa egy szövegdobozt tartalmazó diát hoz létre, klónozza a diát, majd a klónon módosítja a téglalap pozícióját és méretét. Ezután a TransitionType enumerációból a Morph‑ot választja ki a második diára. Nyissa meg a mentett fájlt egy Morph‑ot támogató prezentációs nézőben, hogy lássa a hatást egy diavetítés során.

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 átmenet típusai

A TransitionMorphType enumeráció szabályozza, hogy a Morph hogyan párosítja és animálja a tartalmat:

  • ByObject minden alakzatot egész objektumként kezel.
  • ByWord a szöveget szavak szerint párosítja, ha lehetséges.
  • ByChar a szöveget karakterek szerint párosítja, ha lehetséges.

Használja a setType metódust a Morph kiválasztásához, mielőtt a getValue metódust meghívná. A visszakapott érték ekkor egy MorphTransition osztálypéldány, amelynek a setMorphType metódusa a párosítási módot választja ki.

Ez a példa megnyitja az előző szakaszban létrehozott prezentációt, és a második diát szó‑alapú Morph animációra konfigurálja.

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()

Átmeneti effektusok beállítása

Néhány átmenet további opciókat is felkínál, például irányt vagy azt, hogy a hatás fekete képernyőből indul-e. A rendelkezésre álló opciók a setType által kiválasztott átmenettől függenek. Először állítsa be a típust, majd a megfelelő osztályt a getValue segítségével.

Az alábbi példa egy Cut átmenetet alkalmaz a input.pptx első diájára. A setFromBlack metódust az OptionalBlackTransition osztályon keresztül hívja meg, hogy a tranzíció fekete képernyőből induljon.

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()

GYIK

Kezelhetem a diák átmeneteinek lejátszási sebességét?

Igen. Használja a setDuration metódust, ha pontos effektus‑időt szeretne megadni milliszekundumban. Használja a setSpeed metódust, ha egy előre definiált TransitionSpeed kategória – Slow, Medium vagy Fast – elegendő, és nincs explicite beállítva időtartam. Ezek a beállítások csak az átmenet‑effektust szabályozzák, függetlenül az automatikus előrehaladási késleltetéstől.

Csatolhatok hangot az átmenethez, és hagyhatom, hogy ismétlődjön?

Igen. A beágyazott hangot a setSound metódussal adhatja hozzá, a TransitionSoundMode enumerációból a StartSound‑t a setSoundMode metódusnak adja át, és a setSoundLoop metódussal True értéket állít be. A hang addig ismétlődik, amíg a diavetítésben nem következik egy új hangesemény.

Mi a leggyorsabb módja annak, hogy ugyanazt az átmenetet alkalmazzam minden diára?

Iterálja végig a prezentáció getSlides gyűjteményét, és minden dia átmenetére hívja meg a setType metódust ugyanazzal az értékkel. Az időzítési és effektus‑opciókat ugyanabban a ciklusban állítsa be, hogy a viselkedés minden dián konzisztens legyen.

Hogyan tudom ellenőrizni, hogy jelenleg milyen átmenet van beállítva egy dián?

Hívja meg a getType metódust a dia getSlideShowTransition eredményén. Ez egy értéket ad vissza a TransitionType enumerációból; a None_ azt jelenti, hogy nincs alkalmazva átmenet‑effektus.