article_image

Every application has an inherent amount of complexity that cannot be removed or hidden. Instead, it must be dealt with, either in product development or in user interaction.

Larry Tesler

我在工作中经常收到扫描版的 PDF,这些零散文件数量之多、分布之广、涉及面之杂,早已把主流软件 All in One 的意淫打个粉身碎骨:我绝对不可能统一导入并把它们全部交给某个特定软件。很快,我在《免导入,DEVONthink 随时 OCR PDF》一文中就介绍了更通用的方案,可借用 DEVONthink 处理电脑上任何一处的 PDF 文件。

Alt text
OCR 前的文件无法识别文字或识别出乱码,处理后则可以

只可惜,当时忙于应对工作,无暇优化自动化流程,整个过程看上去实在粗糙,每次 OCR 处理后,总留下一摊临时文件(起中介作用),更糟糕的是,旧方案需要把文件拖入文件夹以触发自动化操作,这套操作太依赖鼠标和图形界面,毫无全键盘操作之凌厉或一键处理之直白。

于是,工作之余,我优化了旧方案,同时也希望对其他基于文件的自动化有所启发。

回顾旧方案,整体逻辑是:预备一个专用文件夹,将其作为触发机关,再于 DEVONthink 内关联此外部文件夹并制备 smart rule(具体方法见前文),迨需处理 PDF 文件时,便将其替身文件(Alias)拖入文件夹中,此时即可借用替身文件触发 DEVONthink 中的 smart rule,OCR 刚刚拖入的文件。而替身毕竟只是一个中转的临时文件,故原始文件仍在原位,不占空间,也不必频繁导入导出文件。

警告:通过 Alias 索引文件时,DEVONthink 实际上直接索引了原始文件,如果你在 DEVONthink 中删除文件、清空垃圾桶并确认抹掉原始文件,那么原始文件也会被删除。根据事故的瑞士奶酪模型,同时踩到前述全部雷点的可能性不高,但仍需注意。

惜乎,旧方案违反直觉之处也在于必须将待处理文件拖入目标文件夹,而这个文件夹又不具备任何文件管理上的意义,它仅仅充当触发机关。或许除了(估计没多少人记得的)DropZone、FilePane 和部分自制方案,也没多少软件采用托拽交互。此番改进,主要在于找回传统的点击或纯快捷键操作。

首先需要澄清,若是 LaunchBar 用户,其实已有现成的纯键盘操作路径。选定目标文件,发送到 LaunchBar 后,径直定位到 OCR 文件夹,按下回车键,旋能看到“Make Alias”选项,即在 OCR 文件夹中为待处理文件创建替身文件。对于熟练使用 LaunchBar 的读者而言,前述原生方式与下文介绍的自定义动作差异不大。

Alt text
LaunchBar 本身可以快速创建替身文件

本文开头提供下载的 LaunchBar 动作——尽管根据上文解释,实则并无意义——Automator 动作以及 Shortcuts 动作则回归经典的交互方式,以 LaunchBar 动作为例,安装后,只需将文件发送给该动作,并回车运行即可。

Alt text
LaunchBar 版的动作

Shortcuts 版或 Automator 版动作则在右键上下文菜单的“Quick Actions”项下——就 Automator 而言,在较低版本的系统中反而可能无需展开此二级菜单——可迳行点击,或借用首字母定位,以求纯键盘操作。所谓首字母定位,即在各种列表状的界面中,可尝试按下字母键或数字键,通常可以定位到列表中第一处出现该字符的位置,例如在下图的诸项自动化动作中,只有“OCR PDF with DEVONthink”这一项以字母 O 开头,则可在展开二级菜单后尝试按一下字母键 O,通常就能瞄准它。

Alt text
Shortcuts 或 Automator 版的动作在右键上下文菜单中

惟需注意,因直接处理外部文件,Shortcuts 版在第一次运行时可能要求授权。

Alt text
Shortcuts 版初次使用时可能需要授权

而在 DEVONthink 这一端,我也稍加改进,增加一小步,每次处理完 PDF 后自动删除 OCR 文件夹下的替身文件,以求整洁。

Alt text
改进后的 DEVONthink smart rule

《免导入,DEVONthink 随时 OCR PDF》到本文,并不夸张地说,当前方案是最复杂的自动化,涉及任一常规自动化工具(LaunchBar、Shortcuts 或 Automator)、文件自动化和胶囊式的界面(DEVONthink smart rule)以及 AppleScript 脚本,而这一切所撑起的,则是尽可能接近“一键 OCR”交互,这可谓是特斯勒复杂守恒定律的又一次应验。

话说回来,本方案仍有改进空间,例如在处理一批文件时,是否有可能显示进度条?DEVONthink 自带的进度条(Activity)在形式上最理想,可惜只能在 DEVONthink 主界面中呈现,用于本方案将打破后台悄然工作的矜持;而 Keyboard Maestro 自带的进度条模块如何与 DEVONthink 中的进度数据衔接,我也暂未得出答案。且待处理完手头工作,再回头看看吧。


author_avatar

Lawyer, macOS/iOS Automation Amateur