Spravovat přechody snímků v prezentacích pomocí Javy

Přehled

Přechody snímků řídí, jak se snímky zobrazují během prezentace. S knihovnou Aspose.Slides pro Java můžete pro každý snímek zvolit efekt přechodu, nakonfigurovat postupování pomocí kliknutí myší nebo časovače a upravit možnosti specifické pro daný efekt. Tento článek používá příklady v jazyce Java k aplikaci přechodů, nastavení přesných délek přechodu, správě časování snímků a vytvoření přechodu Morph mezi dvěma snímky. Příklady také ukazují, jak uložit nastavení do souboru PPTX.

Přidání přechodu snímku

Pro aplikaci přechodu načtěte prezentaci pomocí třídy Presentation a přistupte k nastavení přechodu snímku přes getSlideShowTransition. Použijte setType s hodnotou z výčtu TransitionType, poté prezentaci uložte.

Následující příklad použije přechod Circle na první snímek a přechod Comb na druhý. Použijte soubor input.pptx s alespoň dvěma snímky.

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

Rozšířený přechod snímku

Můžete konfigurovat, jak dlouho snímek zůstane na obrazovce a zda kliknutí myší posune prezentaci dál. Následující metody řídí toto chování:

Povolte jak kliknutí, tak časované posunutí, aby uživatel mohl přejít kliknutím nebo počkat na časovač. Pro použití pouze časovače předávejte false do setAdvanceOnClick. Prodleva řídí, kdy se prezentace posune; nenastavuje délku vizuálního efektu přechodu.

Tento příklad přiřadí různé efekty k prvním třem snímkům a povolí automatické posunutí po 3, 5 a 7 sekundách. Kliknutím myši lze tyto snímky také posunout. Použijte soubor input.pptx s alespoň třemi snímky.

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

Pro kontrolu, zda je časované posunutí aktivní, zavolejte getAdvanceAfter. Uložená prodleva sama neznamená, že je časovač aktivní.

Další příklad otevře výše uložený soubor, nahlásí každý povolený časovač a zakáže automatické posunutí pro snímky s prodlevou delší než dvě sekundy. Pro tyto snímky povolí kliknutí myší a uloží aktualizovaná nastavení.

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

Přesné řízení časování přechodu

Použijte setDuration k určení přesné délky efektu přechodu v milisekundách. Metoda getSlideShowTransition vrací tato nastavení přes rozhraní ISlideShowTransition:

Metoda Účel
setDuration Nastaví délku samotného efektu přechodu v milisekundách.
setAdvanceAfterTime Nastaví prodlevu před automatickým posunutím snímku v milisekundách. Pro aktivaci tohoto časovače předávejte true do setAdvanceAfter.
setSpeed Vybere předdefinovanou kategorii rychlosti z výčtu TransitionSpeed: Slow, Medium nebo Fast. Používá se, když není zadána přesná délka.

setDuration ovlivňuje jen efekt přechodu; neurčuje, jak dlouho snímek zůstane viditelný. Automatickou prodlevu posunutí nastavte samostatně. Když není explicitně zadána délka, Aspose.Slides odvozuje dobu trvání z typu přechodu a hodnoty getSpeed.

Použít stejnou délku na každý snímek

Pro jednotné tempo použijte stejný efekt a přesnou délku na všechny snímky. Tento příklad načte input.pptx, vybere Fade z TransitionType a nastaví každému přechodu délku 750 milisekund. Samostatně povolí automatické posunutí po 5 000 milisekundách a zakáže posunutí kliknutím, poté výsledek uloží jako 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);

        // Nastavte automatické posunování nezávisle na délce efektu.
        transition.setAdvanceAfter(true);
        transition.setAdvanceAfterTime(5000);
        transition.setAdvanceOnClick(false);
    }

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

Nastavit různé délky pro jednotlivé snímky

Různé snímky mohou mít různé délky efektu. Například použijte krátký přechod pro úvodní snímek a delší přechod pro úvod sekce. Tento příklad nastaví 500 milisekund pro první snímek a 1 200 milisekund pro druhý. Použijte soubor input.pptx s alespoň dvěma snímky.

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

Koordinovat přechody s animovaným výstupem

Při přípravě animated GIF, HTML5 presentation nebo video nastavte přesné délky přechodů před exportem, aby odpovídaly zamýšlenému tempu. Například použijte 600 ms fade mezi scénami a samostatně upravte prodlevu posunutí každého snímku, aby byl čas na jeho komentář nebo obsah.

Pro GIF a video koordinujte snímkovou frekvenci výstupu s délkou efektu: 600 ms odpovídá 18 snímkům při 30 fps. V HTML5 povolte animované přechody v nastavení exportu. Zkontrolujte, jaké efekty a časování podporuje zvolený formát, a předem si výstup prohlédněte, abyste potvrdili synchronizaci.

Načíst existující délku přechodu

Před úpravou přechodu zavolejte getDuration a zjistěte, zda je uložena explicitní hodnota. Hodnota -1 znamená, že není nastavená explicitní délka; nezáporná hodnota udává uloženou délku v milisekundách. Nezadání hodnoty neznamená vypočtenou dobu přehrávání: Aspose.Slides používá typ přechodu a hodnotu getSpeed k určení této doby. Nastavení typu přechodu může inicializovat délku, proto nejprve prověřte původní nastavení.

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

Přechod Morph

Přechod Morph animuje změny mezi objekty na po sobě jdoucích snímcích. Pro vytvoření jednoduchého efektu Morph klonujte snímek, přesunte nebo změňte velikost objektu na klonu a aplikujte na druhý snímek přechod Morph. Tím získáte animaci odpovídajících objektů mezi jejich původním a upraveným stavem.

Následující příklad vytvoří snímek s textovým obdélníkem, klonuje snímek a změní pozici a velikost obdélníku na klonu. Pak vybere Morph ze výčtu TransitionType pro druhý snímek. Otevřete uložený soubor v prohlížeči prezentací, který podporuje Morph, a podívejte se na efekt během prezentace.

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

Typy přechodu Morph

Výčet TransitionMorphType určuje, jak Morph přiřazuje a animuje obsah:

  • ByObject zachází s každým tvarem jako s celým objektem.
  • ByWord animuje text porovnáváním slov, kde je to možné.
  • ByChar animuje text porovnáváním znaků, kde je to možné.

Použijte setType pro výběr Morph před přístupem k getValue. Hodnota pak poskytne rozhraní IMorphTransition, jehož metoda setMorphType vybírá režim přiřazení.

Tento příklad otevře prezentaci vytvořenou v předchozí sekci a nakonfiguruje druhý snímek tak, aby používal animaci Morph založenou na slovech.

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

Nastavení efektů přechodu

Některé přechody odhalují další možnosti, jako je směr nebo zda efekt začíná z černé obrazovky. Dostupné možnosti závisí na přechodu zvoleném pomocí setType. Nejprve nastavte typ, pak použijte příslušné rozhraní z getValue.

Následující příklad aplikuje přechod Cut na první snímek input.pptx. Volá setFromBlack přes IOptionalBlackTransition, takže přechod začíná z černé obrazovky.

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

Často kladené otázky

Mohu řídit rychlost přehrávání přechodu snímku?

Ano. Upřednostněte setDuration, když potřebujete přesnou délku efektu v milisekundách. Použijte setSpeed, když stačí předdefinovaná kategorie TransitionSpeed – Slow, Medium nebo Fast – a není nastavená explicitní délka. Tato nastavení řídí efekt přechodu nezávisle na automatické prodlevě posunutí.

Mohu k přechodu připojit zvuk a nechat jej opakovat?

Ano. Přiřaďte vložený zvuk pomocí setSound, předávejte StartSound z výčtu TransitionSoundMode do setSoundMode, a povolte setSoundLoop s hodnotou true. Zvuk bude opakován až do další zvukové události v prezentaci.

Jak nejrychleji aplikovat stejný přechod na všechny snímky?

Projděte kolekci getSlides prezentace a pro každý snímek zavolejte setType se stejnou hodnotou. V tomtéž cyklu nastavte jakékoli časové a efektové možnosti, aby chování zůstalo konzistentní napříč všemi snímky.

Jak zjistit, který přechod je aktuálně nastaven na snímku?

Zavolejte getType na výsledku getSlideShowTransition daného snímku. Vrátí hodnotu z výčtu TransitionType; None znamená, že žádný přechod není aplikován.