制作Mac Automator快速操作:将PDF图片保存至原文件夹
嘿,我刚好碰到过类似的Automator坑,帮你梳理下问题根源和完美解决办法!
你遇到的「‘Rename Finder Items: Name Single Item’遇到错误:‘向Name Single Item传入了多个Finder项目’」这个问题,核心原因很简单:这个重命名动作天生只能处理单个文件,但当你从单份PDF里提取出多张图片时,它会一次性收到一堆图片文件,直接超出了它的处理能力,自然就报错了。而且你要处理多个不同文件夹的PDF,还要把图片存回各自原文件夹,这个动作本身也没法帮你精准定位每个PDF的原始路径。
下面给你两个经过实测的解决方案,都能完美实现你的需求:同时处理多文件夹的PDF,把每个PDF里的图片自动存回它所在的原文件夹,还能自动给图片按「PDF文件名_页码」的格式命名。
这是最适配Automator快速操作的方式,步骤清晰,容易调试:
1. 新建快速操作模板
打开Automator,选择「快速操作」模板,然后在顶部做如下设置:
- 「工作流程收到」选择「文件或文件夹」
- 「位于」选择「Finder.app」
- 勾选「输出替换所选文本」(这个可选,不影响核心功能)
2. 添加「Run AppleScript」动作
删掉默认的占位动作,从左侧动作库找到「Run AppleScript」拖到工作流区域,替换掉默认脚本,粘贴下面的代码:
on run {input, parameters} repeat with aFile in input -- 只处理PDF格式的文件 if name extension of aFile is "pdf" then set pdfPath to POSIX path of aFile set pdfFolder to POSIX path of (container of aFile as alias) set pdfName to text 1 thru -5 of (name of aFile as string) -- 自动去掉.pdf后缀 -- 用系统自带的sips命令提取图片,直接存到原文件夹,自动按页码命名 do shell script "sips -s format png " & quoted form of pdfPath & " --out " & quoted form of pdfFolder & quoted form of pdfName & "_%d.png" end if end repeat return input end run
代码小说明
- 脚本会循环处理每一个你选中的PDF文件,自动获取它的原始文件夹路径和文件名(去掉后缀)
- 用Mac自带的
sips命令提取图片,%d会自动替换成页码,比如你选了「报告.pdf」,提取出的图片就是「报告_1.png」「报告_2.png」 - 所有图片直接保存到该PDF所在的原文件夹,完全不用手动指定固定路径
如果你对Shell脚本更熟悉,也可以用这个方式,速度会稍快一点:
- 同样新建快速操作,顶部设置和方案一一致
- 添加「Run Shell Script」动作,设置「传递输入」为「作为自变量」
- 粘贴下面的脚本:
for f in "$@"; do # 只处理PDF文件 if [[ "${f##*.}" == "pdf" ]]; then dir=$(dirname "$f") filename=$(basename "$f" .pdf) # 提取图片到原文件夹,自动按页码命名 sips -s format png "$f" --out "$dir/${filename}_%d.png" fi done
你之前用的「Rename Finder Items: Name Single Item」是为单个文件重命名设计的,当sips一次性输出多张图片时,这个动作会收到多个文件,它根本没法处理批量重命名,所以直接抛出了“传入多个Finder项目”的错误。而上面的两个方案,都是在提取图片的同时就完成了命名,完全跳过了那个坑人的重命名动作,从根源上解决了问题。
内容的提问来源于stack exchange,提问作者Tony M




