一款带动画 PowerPoint 转 PDF 神器:PPspliT

English speakers can refer to this SuperUser StackExchange answer and the pages it links to. I also encourage everyone to vote for this feature in PowerPoint.

题图
题图

最近在思考到底用 PowerPoint 还是 Beamer 制作我的讲座 (talk) 演示文稿,这里的主要顾虑是 Beamer 编写起来很累(尤其是复杂动画),而 PowerPoint 不能方便地导出根据动画分割的 PDF、幻灯片截图。网上搜索的时候在 SuperUser StackExchange 问答里 发现了 PPspliT 这款神器,所以就决定是你了——PowerPoint!

题图是我拆解重组的,显然可能违反 Microsoft 的商标使用规范,不过 PPspliT 的作者也做了切开版的 PowerPoint 2007 徽标,所以暂且这样吧。另外,Keynote 自带这个功能(导出 PDF 时选择 Print each stage of builds 即可),但是我不常用 Keynote(也不考虑特地用它做讲座的演示文稿)。一个原因是它不是全平台(浏览器不算),另一个原因是无法编程访问。

第一步是从上面的网址获得 PPspliT 并安装,这个软件的惊人之处在于它最近一次更新(2019 年 6 月)居然是为了改进和 PowerPoint XP (2002) / 2003 的兼容性。不出意外,现在大家使用的都是 2013/2016/2019/365 了,安装快结束的时候会看到如下提示:

安装快结束时提示 PowerPoint 2013/2016 的新功能可能支持不好
安装快结束时提示 PowerPoint 2013/2016 的新功能可能支持不好

我准备了 一份测试演示文稿,有四张幻灯片:

方框里的序号表示动画顺序(第几次点击鼠标后会播放),通常来说动画是“出现”;每张幻灯片都有自动附加的幻灯片编号。第一张没什么特别的。第二张的内容占位符里内容过多导致自动调整 (AutoFit),此外标题的动画(第五步)是颜色变成蓝色。第三张里有五张图片,从下往上依次出现,且这些图片的位置重叠。第四张里具有第三步动画的箭头也参与第九步动画,那是它会移动到第二步动画的箭头上方,同时红色斜线和“非适应性安全性”字样出现——一开始的布局是 CPA 安全性的定义,接着通过动画展示非适应性安全性和 CPA 安全性的不同之处,并把标题改成“非适应性安全性”。

如果直接把这个演示文稿输出为 PDF,得到的是四页,前两张还算可以接受,第三张里除了最上面的图片都被盖住了,第四张则会导致输出完全错误的一张图(流程图是 CPA 安全性,但标题会显示为“非适应性安全性”,因为输出时会失去所有动画)。如果要像 Beamer 那样每个动画停顿都单独输出一页,一种土办法是自己把动画的每一步都拆开,这种方法有诸多问题:

  • 费时费力。
  • 如果只是简单删除动画里还没出现或者已经消失的对象,则具有自动调整 (AutoFit) 的占位符在一些时刻会恢复为常规大小,导致输出不连贯。
  • 非出现消失动画(强调、位移)需要复杂的手工处理。

如果想要输出的是图片,则可以通过手工播放、每步动画后截图实现,这个操作也费时费力(不过自动化起来非常简单,可以用按键脚本实现),而且只能输出光栅化的图片 [rasterized image](不能输出向量图 [vector graphics])。

那么有请 PPspliT 登场!安装后打开或重启 PowerPoint,最后一个选项卡就是了:

PPspliT 选项卡
PPspliT 选项卡

通常来说默认选项就是我们想要的:

  • Split on click-triggered animations 是指只有鼠标点击触发的动画才分割,如果取消的话则任意两个动画之间(包括“与上一个动画同时开始”“在上个动画之后开始”的动画)都会分割。通常来说,多个形状(未组合)同时出现消失是利用“与上一个动画同时开始”达成的,所以取消这个选项会导致输出“不存在”的页面状态。
  • Adjust slide numbers 把每张幻灯片展开结果的编号设置为原来的编号。这通常是所希望的效果,即使有动画,逻辑上来说那还是“同一张幻灯片”。我的例子里面每张幻灯片右下角都插入了编号,可以展示这一点。

这个程序原地操作,而拆分结果难以编辑,所以实际使用的时候要先保存演示文稿,再另存为新文件,最后点 Split animations 进行拆分。过程中会显示如下进度对话框:

PPspliT 拆分中
PPspliT 拆分中

这里有两项需要注意的:

  • 按照提示,操作期间不要使用剪贴板。这是因为 PPspliT 会使用剪贴板来暂存有动画的对象。
  • 这个对话框是非模态 (modeless) 对话框,即操作过程中仍然可以点击 PowerPoint 的其他按钮。不要这样做,特别要避免连击 Split animations——这会导致幻灯片内容和剪贴板的双重竞态条件 (race condition)

点开始按钮时如果在左侧的缩略图里选择了一些幻灯片,则程序会问你是想要处理选中的第一张到最后一张(Yes),还是处理所有幻灯片(No),还是取消(Cancel)。注意:不连续选区会导致选中的第一张到最后一张都被处理,包括中间没有选中的。

分割结果差强人意
分割结果差强人意

几个值得注意的点:

  • 处理过的文件不含动画,显示 小星星 是因为 PPspliT 给除了第一张的幻灯片都设置了切入 (Cut) 的切换效果。
  • 第三到十一张之间内容占位符的字号没有变化,说明它可以正确处理自动调整 (AutoFit)
  • 拆分后的幻灯片具有拆分前的编号(右下角)。
  • 第七张开始标题变成了蓝色,说明它可以处理强调类动画。
  • 最后一张里用动画移动的箭头位置是动画结束时的位置,说明它可以处理位移类动画。

用分割后的演示文稿导出 PDF 就大功告成啦!

不过这个软件也不是万能的,比如有些强调类动画是近似处理;又,如果某个文本框的动画是“按段落出现”,且实际动画有重排或者穿插其他形状的动画,且段落内是数学公式和文字混排,则会出现乱七八糟的分割结果。这个功能要是官方的估计就没有这些瑕疵了,看到这里的朋友请顺手 在这里投票 建议 Microsoft 实现完美带动画导出 PDF 和图片的功能。

再次感谢 Massimo Rimondini 制作 PPspliT 并免费分发!

Bonus 强迫症. 那个东西叫演示文稿 (presentation) 或者幻灯片 (slides),不是叫 PPT。.ppt.pptx 文件类型的官方名字是“PowerPoint 演示文稿”。

请启用 JavaScript 来查看由 Disqus 驱动的评论。