web-dev-qa-db-fra.com

Conversion de diapositives animées en statique PDF

Pour vous tous, ceux qui réalisent des diapositives ppt avec des animations comme:

  • Affichage des puces une par une
  • Affichage des images une par une ou zoom sur un tracé
  • Affichage d'une bordure sur un élément actif
  • Navigation interne/menu/lien vers une autre diapositive
  • Transitions entre les diapositives

Existe-t-il un outil qui peut convertir le ppt en PDF et conserver chaque animation dans une diapositive séparée, par exemple?

Je sais que vous pouvez créer des diapositives animées avec LaTeX Beamer qui se convertissent bien en PDF, j'en ai fait certaines, mais je ont également quelques fichiers ppt que je veux convertir en PDF.

Voici ce que j'ai essayé jusqu'à présent:

  • Slideshare, mais non seulement il ne prend pas en charge les animations, mais la navigation interne ne fonctionne pas, et les polices sont toutes foiré.
  • PDFcreator, la qualité est assez supérieure en comparaison, mais elle ne prend pas en charge les animations non plus. En tant que Slideshare, il suffit de mettre une image sur l'autre. En outre, il ne prend pas en charge la transparence (par exemple, une zone de texte avec un bg semi-transparent sur une image)
  • LaTeX Beamer , déjà mentionné, mais je préférerais éviter de taper ces contenus et animations ppts dans LaTeX juste pour que les animations s'affichent correctement en PDF.

J'ai recherché SO et je n'ai pas trouvé de réponse satisfaisante pour gérer les animations. Qu'utilisez-vous?

13
Xirux Nefer

J'ai trouvé un petit plugin qui divise vos diapositives PowerPoint chaque fois qu'elles ont des animations. Donc, si vous avez 3 animations sur 1 diapositive, il générera 3 diapositives avec chaque animation étape par étape. Exportez-le ensuite en PDF :-)

Cela a fonctionné pour moi sur PowerPoint 2010. Je vous recommande de faire un fichier de sauvegarde de présentation avant de le fractionner. Et n'oubliez pas de décocher la case "Diviser sur les animations déclenchées par un clic".

http://www.dia.uniroma3.it/~rimondin/downloads.php

J'ai également trouvé cela (mais la première solution était gratuite et fonctionnait donc :-)) http://www.verypdf.com/wordpress/201306/how-to-create-a-pdf-from-PowerPoint- avec-animations-36850.html

17
sgirardin

Cette article de blog fournit un script de macro VBA qui divisera chaque diapositive qui a des animations (par exemple, des images ou des puces qui apparaissent une par une) en plusieurs diapositives, puis vous pouvez enregistrer sous PDF et le tour est joué!

Surtout, puisqu'il s'agit d'un script VBA, il devrait fonctionner à la fois pour Windows et Mac . Je ne l'ai essayé que sur OSX (yosemite) avec PowerPoint 2011, et cela a plutôt bien fonctionné. Le seul problème que j'avais était que les diapositives avec des puces animées (qui apparaissent une par une) étaient divisées en plusieurs diapositives mais chaque diapositive contenait tous les puces, donc j'ai dû en supprimer manuellement. Pourtant, pour tout le reste, cela a parfaitement fonctionné et c'est un petit prix à payer par rapport à tout faire manuellement, en particulier les animations d'images. Bien sûr, vous pouvez/ne pas rencontrer le même problème sous Windows ou d'autres versions de PP. Dans tous les cas, pour OSX, c'est la seule solution de travail que j'ai trouvée jusqu'à présent.

Les instructions pour ajouter des macros VBA à PowerPoint peuvent être trouvées ici .

J'espère que ça marchera pour toi aussi!

5
jjs

Cette article de blog fournit un script de macro VBA qui divisera chaque diapositive qui contient des animations en plusieurs diapositives, sans garder les diapositives d'origine devant les diapositives développées (comme c'est le cas dans cette réponse ).

Le problème qui subsiste avec cette macro et l'autre macro est que le contenu d'un bloc de texte avec plusieurs animations est toujours affiché dans son ensemble (par exemple, si chaque phrase du même bloc de texte a une animation distincte, toutes les phrases seront toujours affichées ensemble).

Code VBA :

Private AnimVisibilityTag As String

Sub ExpandAnimations()
AnimVisibilityTag = "AnimationExpandVisibility"

Dim pres As Presentation
Dim Slidenum As Integer

Set pres = ActivePresentation
Slidenum = 1
Do While Slidenum <= pres.Slides.Count
Dim s As Slide
Dim animationCount As Integer
Set s = pres.Slides.Item(Slidenum)

If s.TimeLine.MainSequence.Count > 0 Then
    Set s = pres.Slides.Item(Slidenum)
    PrepareSlideForAnimationExpansion s
    animationCount = expandAnimationsForSlide(pres, s)
Else
    animationCount = 1
End If
Slidenum = Slidenum + animationCount
Loop
End Sub

Private Sub PrepareSlideForAnimationExpansion(s As Slide)
' Set visibility tags on all shapes
For Each oShape In s.Shapes
oShape.Tags.Add AnimVisibilityTag, "true"
Next oShape

' Find initial visibility of each shape
For animIdx = s.TimeLine.MainSequence.Count To 1 Step -1
Dim seq As Effect
Set seq = s.TimeLine.MainSequence.Item(animIdx)
On Error GoTo UnknownEffect
For behaviourIdx = seq.Behaviors.Count To 1 Step -1
    Dim behavior As AnimationBehavior
    Set behavior = seq.Behaviors.Item(behaviourIdx)
    If behavior.Type = msoAnimTypeSet Then
        If behavior.SetEffect.Property = msoAnimVisibility Then
            If behavior.SetEffect.To <> 0 Then
                seq.Shape.Tags.Delete AnimVisibilityTag
                seq.Shape.Tags.Add AnimVisibilityTag, "false"
            Else
                seq.Shape.Tags.Delete AnimVisibilityTag
                seq.Shape.Tags.Add AnimVisibilityTag, "true"
            End If
        End If
    End If
Next behaviourIdx
NextSequence:
On Error GoTo 0
Next animIdx
Exit Sub

UnknownEffect:
MsgBox ("Encountered an error while calculating object visibility: " + Err.Description)
Resume NextSequence
End Sub

Private Function expandAnimationsForSlide(pres As Presentation, s As Slide) As Integer
Dim numSlides As Integer
numSlides = 1

' Play the animation back to determine visibility
Do While True
' Stop when animation is over or we hit a click trigger
If s.TimeLine.MainSequence.Count <= 0 Then Exit Do
Dim fx As Effect
Set fx = s.TimeLine.MainSequence.Item(1)
If fx.Timing.TriggerType = msoAnimTriggerOnPageClick Then Exit Do

' Play the animation
PlayAnimationEffect fx
fx.Delete
Loop

' Make a copy of the slide and recurse
If s.TimeLine.MainSequence.Count > 0 Then
s.TimeLine.MainSequence.Item(1).Timing.TriggerType = msoAnimTriggerWithPrevious
Dim nextSlide As Slide
Set nextSlide = s.Duplicate.Item(1)
numSlides = 1 + expandAnimationsForSlide(pres, nextSlide)
End If

' Apply visibility
rescan = True
While rescan
rescan = False
For n = 1 To s.Shapes.Count
    If s.Shapes.Item(n).Tags.Item(AnimVisibilityTag) = "false" Then
        s.Shapes.Item(n).Delete
        rescan = True
        Exit For
    End If
Next n
Wend

' Clear all tags
For Each oShape In s.Shapes
oShape.Tags.Delete AnimVisibilityTag
Next oShape

' Remove animation (since they've been expanded now)
While s.TimeLine.MainSequence.Count > 0
s.TimeLine.MainSequence.Item(1).Delete
Wend

expandAnimationsForSlide = numSlides
End Function


Private Sub assignColor(ByRef varColor As ColorFormat, valueColor As ColorFormat)
If valueColor.Type = msoColorTypeScheme Then
varColor.SchemeColor = valueColor.SchemeColor
Else
varColor.RGB = valueColor.RGB
End If
End Sub


Private Sub PlayAnimationEffect(fx As Effect)
On Error GoTo UnknownEffect
For n = 1 To fx.Behaviors.Count
Dim behavior As AnimationBehavior
Set behavior = fx.Behaviors.Item(n)
Select Case behavior.Type
    Case msoAnimTypeSet
        ' Appear or disappear
        If behavior.SetEffect.Property = msoAnimVisibility Then
            If behavior.SetEffect.To <> 0 Then
                fx.Shape.Tags.Delete AnimVisibilityTag
                fx.Shape.Tags.Add AnimVisibilityTag, "true"
            Else
                fx.Shape.Tags.Delete AnimVisibilityTag
                fx.Shape.Tags.Add AnimVisibilityTag, "false"
            End If
        Else
            ' Log the problem
        End If
    Case msoAnimTypeColor
        ' Change color
        If fx.Shape.HasTextFrame Then
            Dim range As TextRange
            Set range = fx.Shape.TextFrame.TextRange
            assignColor range.Paragraphs(fx.Paragraph).Font.Color, behavior.ColorEffect.To
        End If


    Case Else
        ' Log the problem
End Select
Next n
Exit Sub
UnknownEffect:
MsgBox ("Encountered an error expanding animations: " + Err.Description)
Exit Sub
End Sub
2
Matthias

Pour ceux d'entre vous qui utilisent LibreOffice ou OpenOffice, il existe un plugin disponible sur github qui le fait très bien:

ExpandAnimations

D'après mon expérience, toutes les animations standard d'apparition/disparition sont bien divisées. Les animations de mouvement d'objet fonctionnent également (vous obtenez une diapositive avec la position de départ et une avec la position de fin de l'objet). Je n'ai pas eu la chance de tester d'autres types d'animation, mais cela devrait couvrir tous les besoins standard :-)

1
RoB