Анимированные слайды преобразования в статические PDF
Для всех вас, людей, которые делают слайды ppt с анимацией, например:
- Отображение пунктов маркера один за другим
- Отображение изображений по одному или масштабирование сюжета
- Отображение границы на активном элементе
- Внутренняя навигация/меню/ссылка на другой слайд
- Переходы между слайдами
Существует ли инструмент, который может конвертировать ppt в PDF и сохранять каждую анимацию, например, на отдельном слайде?
Я знаю, что вы можете создавать анимированные слайды с помощью LaTeX Beamer, которые прекрасно конвертируются в PDF. Я сделал некоторые из них, но у меня также есть некоторые ppt файлы, которые я хочу конвертировать в PDF.
Это то, что я пробовал до сих пор:
- Slideshare, однако он не только не поддерживает анимацию, но и внутренняя навигация не работает, и все шрифты перепутаны.
- PDFcreator, качество довольно высокое по сравнению с ним, но он также не поддерживает анимацию. Как Slideshare, он просто поместит одно изображение поверх другого. Кроме того, он не поддерживает прозрачность (например, текстовое поле с полупрозрачной надписью над изображением)
- LaTeX Beamer, уже упоминалось, но я бы предпочел не вводить содержимое и анимации ppts в LaTeX просто для того, чтобы анимация правильно отображалась в PDF.
Я искал ТАК и не нашел удовлетворительного ответа для работы с анимацией. Что ты используешь?
Ответы
Ответ 1
Я нашел небольшой плагин, который разделяет ваши слайды PowerPoint, когда у них есть анимация. Таким образом, если у вас есть 3 анимации на 1 слайде, он будет генерировать 3 слайда с каждой анимацией шаг за шагом. Затем экспортируйте его в PDF :-)
Это работало для меня в PowerPoint 2010. Я бы порекомендовал вам сделать резервную копию файла презентации перед разделением. И не забудьте снять флажок "Разделять анимацию, запускаемую по клику".
http://www.dia.uniroma3.it/~rimondin/downloads.php
Я тоже нашел это (но первое решение было бесплатным и работало так :-))http://www.verypdf.com/wordpress/201306/how-to-create-a-pdf-from-powerpoint-with-animations-36850.html
Ответ 2
В этом сообщении в блоге содержится макрос VBA script, который разбивает каждый слайд с анимацией (например, изображения или точки маркера, которые появляются на один) в несколько слайдов, а затем вы можете сохранить как PDF и вуаля!
Важно то, что VBA script он должен работать как для Windows, так и для Mac. Я только пробовал это на OSX (yosemite) с powerpoint 2011, и он работал очень хорошо. Единственная проблема, с которой я столкнулась, заключалась в том, что слайды с анимированными точками пули (которые появляются один за другим) были разделены на несколько слайдов, но каждый слайд содержал все точки маркера, поэтому мне пришлось удалить их вручную. Тем не менее, для всего остального он отлично работал, и это небольшая цена для оплаты по сравнению с выполнением всего этого вручную, особенно анимации изображений. Конечно, вы можете/не можете столкнуться с той же проблемой в Windows или других версиях PP. В любом случае для OSX это единственное работающее решение, которое я нашел до сих пор.
Инструкции по добавлению макросов VBA к powerpoint можно найти здесь.
Надеюсь, что это сработает и для вас!
Ответ 3
Это сообщение в блоге содержит макрос VBA script, который разбивает каждый слайд, который имеет анимацию на несколько слайдов, не сохраняя исходные слайды перед расширенными слайдами (как в случае этот ответ).
Проблема, остающаяся с этим макросом и другим макросом, заключается в том, что содержимое текстового блока с несколькими анимациями всегда отображается в целом (например, если каждое предложение одного и того же текстового блока имеет отдельную анимацию, все предложения будут всегда отображаться вместе).
Код 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
Ответ 4
Для тех из вас, кто использует LibreOffice или OpenOffice,
на github есть плагин, который делает это очень хорошо:
ExpandAnimations
По моему опыту, все стандартные анимации появления/исчезновения хорошо разделены. Анимации движения объекта также работают (вы получаете слайд с начальной позицией и один с конечной позицией объекта). У меня не было возможности протестировать другие типы анимации, но это должно охватывать все стандартные потребности :-)