利用macOS的Automator,可以在Finder菜单中快速对一个或多个PowerPoint文稿进行格式转换、生成PDF、文件提取等操作。此操作需要macOS中安装较新版本的Microsoft Office PowerPoint。
背景:要从物理课的.ppt文件格式的操作中提取出音频用以加速播放及调整进度条,而.ppt文件无法直接解压缩,需要转换为.pptx格式再解压缩后提取出音频。
开始编写Quick Action流程
打开Automator App(默认位于Launchpad的Other文件夹中),新建Quick Action。Quick Action是可以加入Finder菜单、Services菜单的一类Workflow流程。
在左侧查找Filter Finder Items拖入右侧流程中,对输入文件的后缀名称进行过滤。这里仅接受ppt后缀名的文件,若要对pptx pps ppsx等后缀名的文件进行处理,也可以将其加入过滤器中并将规则All改为Any。
开始编写Apple Script,打开PowerPoint文件
在左侧寻找Run Apple Script,拖入右侧流程图中。下面的代码将ppt转为pptx并保存在同一文件夹中。若要接受更多格式的后缀名,需要修改makeNewPath部分(这里是将后三位ppt截掉,换成pptx)。
on run {input, parameters}
set output_list to {}
tell application "Microsoft PowerPoint"
launch
set theDial to start up dialog
set start up dialog to false
repeat with i in input
open i
set output_path to my makeNewPath(i)
save active presentation in output_path
close active presentation saving no
set end of output_list to output_path as alias
end repeat
set start up dialog to theDial
quit
end tell
return output_list
end run
on makeNewPath(f)
set t to f as string
return (text 1 thru -4 of t) & "pptx"
end makeNewPath
若要转换为PDF格式,则需将
save active presentation in output_path
一句改为
save active presentation in output_path as save as PDF
并修改makeNewPath的部分:
on makeNewPath(f)
set t to f as string
if t ends with ".pptx" then
return (text 1 thru -5 of t) & "pdf"
else
return t & ".pdf"
end if
end makeNewPath
至此,将ppt转为pptx或将ppt/pptx转为pdf的功能已实现完毕。如不需要文件提取,请向后跳到“调试和使用”一节。
编写Shell Script提取pptx中的文件
使用压缩软件打开.pptx文稿即可读取其内容。若要实现自动化处理,可以使用Automator的Run Shell Script模块。
下面是提取全部音频文件的代码,Run Shell Script设置为将输入传达到参数中。
for f in "$@"
do
unzip "$f" -d "$f Files/"
mkdir "$f Audio"
for file in `ls "$f Files/ppt/media/"`
do
if [ "${file##*.}" = "wav" ]; then
mv -f "$f Files/ppt/media/$file" "$f Audio/"
fi
done
rm -rf "$f Files/"
rm -f "$f"
done
这段代码将pptx中附着的音频文件拷贝到与pptx相同目录下的*.pptx Audio文件夹中,并将源文件删除。
调试和使用
由于在Automator中测试并没有文件读入,测试时可以在流程开始处拖入Get Specified Finder Items指定输入文件(正式在Automator外使用前要删掉)。
之后,按下Command+S保存脚本,输入一个名字,就可以在Finder右键菜单的Services项或是文件的预览栏中找到刚刚编写的脚本了。
.workflow文件的存储位置在~/Library/Services/下,对其重命名即可改变菜单中的名称。
此处有一个问题:在较高版本的macOS中实际执行时会出现读写磁盘权限不足的问题。这时需要对该脚本赋予Full Disk Access权限。打开System Preferences,在Security & Privacy中找到Full Disk Access,左下角解锁后点击加号,将执行该脚本的Finder加入进去并赋予权限。Finder.app的路径在/System/Library/CoreServices中。
可以用了!