Appliquer des animations de forme dans les présentations avec Java

Les animations sont des effets visuels qui peuvent être appliqués aux textes, images, formes ou graphiques. Elles donnent vie aux présentations ou à leurs composants.

Pourquoi utiliser les animations dans les présentations ?

En utilisant les animations, vous pouvez

  • contrôler le flux d’informations
  • mettre en évidence les points importants
  • augmenter l’intérêt ou la participation de votre audience
  • rendre le contenu plus facile à lire, assimiler ou traiter
  • attirer l’attention de vos lecteurs ou spectateurs sur les parties importantes d’une présentation

PowerPoint propose de nombreuses options et outils pour les animations et les effets d’animation dans les catégories entrance, exit, emphasis et motion paths.

Animations dans Aspose.Slides

  • Aspose.Slides fournit les classes et types dont vous avez besoin pour travailler avec les animations dans l’espace de noms Aspose.Slides.Animation,
  • Aspose.Slides propose plus de 150 effets d’animation dans l’énumération EffectType. Ces effets sont essentiellement les mêmes (ou équivalents) que ceux utilisés dans PowerPoint.

Appliquer une animation à une zone de texte

Aspose.Slides pour Java vous permet d’appliquer une animation au texte d’une forme.

  1. Créez une instance de la classe Presentation.
  2. Obtenez une référence à une diapositive via son indice.
  3. Ajoutez un rectangle IAutoShape.
  4. Ajoutez du texte à IAutoShape.TextFrame.
  5. Récupérez la séquence principale d’effets.
  6. Ajoutez un effet d’animation à IAutoShape.
  7. Définissez la propriété TextAnimation.BuildType sur la valeur de l’énumération BuildType.
  8. Enregistrez la présentation sur le disque au format PPTX.

Ce code Java vous montre comment appliquer l’effet Fade à AutoShape et définir l’animation du texte sur la valeur By 1st Level Paragraphs :

// Instancie une classe de présentation qui représente un fichier de présentation.
Presentation pres = new Presentation();
try {
    ISlide sld = pres.getSlides().get_Item(0);

    // Ajoute une nouvelle AutoShape avec texte
    IAutoShape autoShape = sld.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 100);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.setText("First paragraph \nSecond paragraph \n Third paragraph");

    // Obtient la séquence principale de la diapositive.
    ISequence sequence = sld.getTimeline().getMainSequence();

    // Ajoute l'effet d'animation Fade à la forme
    IEffect effect = sequence.addEffect(autoShape, EffectType.Fade, EffectSubtype.None, EffectTriggerType.OnClick);

    // Anime le texte de la forme par paragraphes de premier niveau
    effect.getTextAnimation().setBuildType(BuildType.ByLevelParagraphs1);

    // Enregistre le fichier PPTX sur le disque
    pres.save(path + "AnimText_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Appliquer une animation à un PictureFrame

  1. Créez une instance de la classe Presentation.
  2. Obtenez une référence à une diapositive via son indice.
  3. Ajoutez ou récupérez un PictureFrame sur la diapositive.
  4. Récupérez la séquence principale d’effets.
  5. Ajoutez un effet d’animation à PictureFrame.
  6. Enregistrez la présentation sur le disque au format PPTX.

Ce code Java vous montre comment appliquer l’effet Fly à un cadre d’image :

// Instancie une classe de présentation qui représente un fichier de présentation.
Presentation pres = new Presentation();
try {
    // Charge l'image à ajouter à la collection d'images de la présentation
    IPPImage picture;
    IImage image = Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // Ajoute un cadre d'image à la diapositive
    IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, picture);

    // Obtient la séquence principale de la diapositive.
    ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();

    // Ajoute l'effet d'animation Fly depuis la gauche au cadre d'image
    IEffect effect = sequence.addEffect(picFrame, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.OnClick);

    // Enregistre le fichier PPTX sur le disque
    pres.save(path + "AnimImage_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Appliquer une animation à une forme

  1. Créez une instance de la classe Presentation.
  2. Obtenez une référence à une diapositive via son indice.
  3. Ajoutez un rectangle IAutoShape.
  4. Ajoutez un Bevel IAutoShape (lorsque cet objet est cliqué, l’animation est déclenchée).
  5. Créez une séquence d’effets sur la forme Bevel.
  6. Créez un UserPath personnalisé.
  7. Ajoutez des commandes pour se déplacer vers le UserPath.
  8. Enregistrez la présentation sur le disque au format PPTX.

Ce code Java vous montre comment appliquer l’effet PathFootball (path football) à une forme :

// Instancie une classe Presentation qui représente un fichier PPTX.
Presentation pres = new Presentation();
try {
    ISlide sld = pres.getSlides().get_Item(0);

    // Crée l'effet PathFootball pour une forme existante à partir de zéro.
    IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 250, 25);
    ashp.addTextFrame("Animated TextBox");

    // Ajoute l'effet d'animation PathFootBall
    pres.getSlides().get_Item(0).getTimeline().getMainSequence().addEffect(ashp, EffectType.PathFootball,
            EffectSubtype.None, EffectTriggerType.AfterPrevious);

    // Crée une sorte de "button".
    IShape shapeTrigger = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Bevel, 10, 10, 20, 20);

    // Crée une séquence d'effets pour ce bouton.
    ISequence seqInter = pres.getSlides().get_Item(0).getTimeline().getInteractiveSequences().add(shapeTrigger);

     // Crée un chemin utilisateur personnalisé. Notre objet ne sera déplacé qu'après que le bouton soit cliqué.
    IEffect fxUserPath = seqInter.addEffect(ashp, EffectType.PathUser, EffectSubtype.None, EffectTriggerType.OnClick);

     // Ajoute des commandes de déplacement puisque le chemin créé est vide.
    IMotionEffect motionBhv = ((IMotionEffect)fxUserPath.getBehaviors().get_Item(0));

    Point2D.Float[] pts = new Point2D.Float[1];
    pts[0] = new Point2D.Float(0.076f, 0.59f);
    motionBhv.getPath().add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, true);
    pts[0] = new Point2D.Float(-0.076f, -0.59f);
    motionBhv.getPath().add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, false);
    motionBhv.getPath().add(MotionCommandPathType.End, null, MotionPathPointsType.Auto, false);

     // Écrit le fichier PPTX sur le disque
    pres.save("AnimExample_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Obtenir les effets d’animation appliqués à une forme

Les exemples suivants vous montrent comment utiliser la méthode getEffectsByShape de l’interface ISequence pour obtenir tous les effets d’animation appliqués à une forme.

Exemple 1 : Obtenir les effets d’animation appliqués à une forme sur une diapositive normale

Auparavant, vous avez appris comment ajouter des effets d’animation aux formes dans les présentations PowerPoint. Le code d’exemple suivant montre comment obtenir les effets appliqués à la première forme de la première diapositive normale de la présentation AnimExample_out.pptx.

Presentation presentation = new Presentation("AnimExample_out.pptx");
try {
    ISlide firstSlide = presentation.getSlides().get_Item(0);

    // Obtient la séquence principale d'animation de la diapositive.
    ISequence sequence = firstSlide.getTimeline().getMainSequence();

    // Obtient la première forme de la première diapositive.
    IShape shape = firstSlide.getShapes().get_Item(0);

    // Obtient les effets d'animation appliqués à la forme.
    IEffect[] shapeEffects = sequence.getEffectsByShape(shape);

    if (shapeEffects.length > 0)
        System.out.println("The shape " + shape.getName() + " has " + shapeEffects.length + " animation effects.");
} finally {
    if (presentation != null) presentation.dispose();
}

Exemple 2 : Obtenir tous les effets d’animation, y compris ceux hérités des espaces réservés

Si une forme sur une diapositive normale possède des espaces réservés qui se trouvent sur la diapositive de mise en page et/ou la diapositive maître, et que des effets d’animation ont été ajoutés à ces espaces réservés, alors tous les effets de la forme seront joués pendant le diaporama, y compris ceux hérités des espaces réservés.

Supposons que nous ayons un fichier de présentation PowerPoint sample.pptx contenant une seule diapositive avec uniquement une forme de pied de page contenant le texte « Made with Aspose.Slides » et que l’effet Random Bars soit appliqué à la forme.

Effet d’animation de forme de diapositive

Supposons également que l’effet Split soit appliqué à l’espace réservé du pied de page sur la diapositive layout.

Effet d’animation de forme de mise en page

Et enfin, que l’effet Fly In soit appliqué à l’espace réservé du pied de page sur la diapositive master.

Effet d’animation de forme maître

Le code d’exemple suivant montre comment utiliser la méthode getBasePlaceholder de l’interface IShape pour accéder aux espaces réservés de forme et obtenir les effets d’animation appliqués à la forme de pied de page, y compris ceux hérités des espaces réservés situés sur les diapositives de mise en page et maître.

Presentation presentation = new Presentation("sample.pptx");

ISlide slide = presentation.getSlides().get_Item(0);

// Get animation effects of the shape on the normal slide.
IShape shape = slide.getShapes().get_Item(0);
IEffect[] shapeEffects = slide.getTimeline().getMainSequence().getEffectsByShape(shape);

// Get animation effects of the placeholder on the layout slide.
IShape layoutShape = shape.getBasePlaceholder();
IEffect[] layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);

// Get animation effects of the placeholder on the master slide.
IShape masterShape = layoutShape.getBasePlaceholder();
IEffect[] masterShapeEffects = slide.getLayoutSlide().getMasterSlide().getTimeline().getMainSequence().getEffectsByShape(masterShape);

System.out.println("Main sequence of shape effects:");
printEffects(masterShapeEffects);
printEffects(layoutShapeEffects);
printEffects(shapeEffects);

presentation.dispose();
static void printEffects(IEffect[] effects)
{
    for (IEffect effect : effects)
    {
        String typeName = EffectType.getName(EffectType.class, effect.getType());
        String subtypeName = EffectSubtype.getName(EffectSubtype.class, effect.getSubtype());

        System.out.println(typeName + " " + subtypeName);
    }
}

Sortie :

Main sequence of shape effects:
Fly Bottom
Split VerticalIn
RandomBars Horizontal

Modifier les propriétés de timing d’un effet d’animation

Aspose.Slides pour Java vous permet de modifier les propriétés de Timing d’un effet d’animation.

Voici le panneau Animation Timing dans Microsoft PowerPoint : example1_image

  • La liste déroulante Start du Timing de PowerPoint correspond à la propriété Effect.Timing.TriggerType.
  • Le Duration du Timing de PowerPoint correspond à la propriété Effect.Timing.Duration. La durée d’une animation (en secondes) est le temps total que l’animation met pour compléter un cycle.
  • Le Delay du Timing de PowerPoint correspond à la propriété Effect.Timing.TriggerDelayTime.
  1. Appliquer ou récupérer l’effet d’animation.
  2. Définissez de nouvelles valeurs pour les propriétés Effect.Timing dont vous avez besoin.
  3. Enregistrez le fichier PPTX modifié.
// Instancie une classe de présentation qui représente un fichier de présentation.
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
    // Obtient la séquence principale de la diapositive.
    ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();

    // Obtient le premier effet de la séquence principale.
    IEffect effect = sequence.get_Item(0);

    // Change le TriggerType de l'effet pour démarrer au clic
    effect.getTiming().setTriggerType(EffectTriggerType.OnClick);

    // Modifie la durée de l'effet
    effect.getTiming().setDuration(3f);

    // Modifie le TriggerDelayTime de l'effet
    effect.getTiming().setTriggerDelayTime(0.5f);

    // Enregistre le fichier PPTX sur le disque
    pres.save("AnimExample_changed.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Son d’effet d’animation

Aspose.Slides fournit ces propriétés pour vous permettre de travailler avec les sons dans les effets d’animation :

Ajouter un son à un effet d’animation

Ce code Java vous montre comment ajouter un son à un effet d’animation et l’arrêter lorsque l’effet suivant démarre :

Presentation pres = new Presentation("AnimExample_out.pptx");
try {
    // Ajoute un audio à la collection audio de la présentation
    IAudio effectSound = pres.getAudios().addAudio(Files.readAllBytes(Paths.get("sampleaudio.wav")));

    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Obtient la séquence principale de la diapositive.
    ISequence sequence = firstSlide.getTimeline().getMainSequence();

    // Obtient le premier effet de la séquence principale
    IEffect firstEffect = sequence.get_Item(0);

    // Vérifie que l'effet n'a pas de son
    if (!firstEffect.getStopPreviousSound() && firstEffect.getSound() == null)
    {
        // Ajoute le son au premier effet
        firstEffect.setSound(effectSound);
    }

    // Obtient la première séquence interactive de la diapositive.
    ISequence interactiveSequence = firstSlide.getTimeline().getInteractiveSequences().get_Item(0);

    // Définit le drapeau "Stop previous sound" de l'effet
    interactiveSequence.get_Item(0).setStopPreviousSound(true);

    // Écrit le fichier PPTX sur le disque
    pres.save("AnimExample_Sound_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Extraire le son d’un effet d’animation

  1. Créez une instance de la classe Presentation.
  2. Obtenez une référence à une diapositive via son indice.
  3. Récupérez la séquence principale d’effets.
  4. Extrayez le setSound(IAudio value) incorporé à chaque effet d’animation.
// Instancie une classe de présentation qui représente un fichier de présentation.
Presentation presentation = new Presentation("EffectSound.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // Obtient la séquence principale de la diapositive.
    ISequence sequence = slide.getTimeline().getMainSequence();

    for (IEffect effect : sequence)
    {
        if (effect.getSound() == null)
            continue;

        // Extrait le son de l'effet sous forme de tableau d'octets
        byte[] audio = effect.getSound().getBinaryData();
    }
} finally {
    if (presentation != null) presentation.dispose();
}

Après l’animation

Aspose.Slides pour Java vous permet de modifier la propriété After animation d’un effet d’animation.

Voici le volet Animation Effect et le menu étendu dans Microsoft PowerPoint : example1_image

La liste déroulante After animation de PowerPoint correspond aux propriétés suivantes :

// Instancie une classe de présentation qui représente un fichier de présentation
Presentation pres = new Presentation("AnimImage_out.pptx");
try {
    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Obtient le premier effet de la séquence principale
    IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);

    // Modifie le type d'animation après en Couleur
    firstEffect.setAfterAnimationType(AfterAnimationType.Color);

    // Définit la couleur d'atténuation de l'animation après
    firstEffect.getAfterAnimationColor().setColor(Color.BLUE);

    // Enregistre le fichier PPTX sur le disque
    pres.save("AnimImage_AfterAnimation.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Animer le texte

Aspose.Slides fournit ces propriétés pour vous permettre de travailler avec le bloc Animate text d’un effet d’animation :

  1. Appliquer ou récupérer l’effet d’animation.
  2. Définissez la propriété setBuildType(int value) sur la valeur BuildType.AsOneObject pour désactiver le mode d’animation By Paragraphs.
  3. Définissez de nouvelles valeurs pour les propriétés setAnimateTextType(int value) et setDelayBetweenTextParts(float value).
  4. Enregistrez le fichier PPTX modifié.
// Instancie une classe de présentation qui représente un fichier de présentation.
Presentation pres = new Presentation("AnimTextBox_out.pptx");
try {
    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Obtient le premier effet de la séquence principale
    IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);

    // Modifie le type d'animation du texte de l'effet en "As One Object"
    firstEffect.getTextAnimation().setBuildType(BuildType.AsOneObject);

    // Modifie le type d'animation du texte de l'effet en "By word"
    firstEffect.setAnimateTextType(AnimateTextType.ByWord);

    // Définit le délai entre les mots à 20% de la durée de l'effet
    firstEffect.setDelayBetweenTextParts(20f);

    // Enregistre le fichier PPTX sur le disque
    pres.save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Comment puis‑je garantir que les animations sont conservées lors de la publication de la présentation sur le web ?
Export to HTML5 et activez les options responsables des animations de shape et de transition. Le HTML simple ne lit pas les animations de diapositives, alors que le HTML5 le fait.

Comment le changement de l’ordre Z (ordre des calques) des formes affecte‑t‑il les animations ?
L’animation et l’ordre de dessin sont indépendants : un effet contrôle le timing et le type d’apparition/disparition, tandis que le z-order détermine ce qui recouvre quoi. Le résultat visible est défini par leur combinaison. (Ceci est le comportement général de PowerPoint ; le modèle effets‑et‑formes d’Aspose.Slides suit la même logique.)

Existe‑t‑il des limitations lors de la conversion des animations en vidéo pour certains effets ?
En général, les animations sont prises en charge, mais des cas rares ou des effets spécifiques peuvent être rendus différemment. Il est recommandé de tester avec les effets que vous utilisez et avec la version de la bibliothèque.