less than 1 minute read

论文往往需要高精度的图片,常见的方式是导出 PDF 格式的图片。但各种画图软件导出 PDF 往往都有白边,占用论文的很多额外空间。当图片数量较少时,可以用在线 PDF 剪切工具手动逐个修改。不过手动修改总是比较麻烦的,为了减少重复劳动,在 Win11 下,将现有的多个工具联合部署,提供了快捷键修 PDF 白边的解决方案。

TL;DR:使用已有的 PDF 裁剪工具,将裁剪参数绑定到快捷键工具的脚本上,使得使用快捷键时自动填入参数,实现快捷键直接裁剪。

环境需求

由于这个功能主要是自用,环境主要依赖已有的一些其他软件。如果想要使用这一解决方案,可能需要根据自己的环境调整各工具。以下的脚本命令均在 powershell 环境下执行。

部署 pdf-cut-white

由于使用 python 作为惯用的脚本语言,在需要裁剪 PDF 时,第一个想到的就是使用 python 实现。于是上 Github 找有没有相关项目,果然找到一个.将其简单部署到本地:

# 新建目录,这里的路径是一个示意版本,仅供参考
mkdir \cut-white
cd \cut-white
# 拉取项目
git clone https://github.com/FFengIll/pdf-cut-white.git
# 移动到项目目录
cd .\pdf-cut-white-master
# 下载项目依赖
pip3 install -r requirements.txt

在完成了上述步骤之后,已经可以通过命令行自动裁白边了。大致命令如下:

python3 cli.py -i ${原始PDF} -o ${新PDF,不能重名}  --ignore 2

注意需要加上--ignore 2,否则裁不干净。

快捷键绑定

Listary是我一直使用的一个快捷工具,主要用来快速启动各种软件,维持桌面整洁。在必要的时候,它的全局搜索也比 Windows 自带的快很多,用来找东西也很方便。

因此,在这里继续沿用 Listary 的动作(action)功能,实现在任意目录下使用快捷键调取pdf-cut-white并裁剪目标 PDF。这是它的使用文档,读起来非常抽象。但事实上只需要仿照已有的预设动作填空就行了,包括填写热键、路径、参数,并把作用范围选为文件资源管理器。为了比较好的扩展性,这里不直接使用 python 脚本,而是用 powershell 脚本crop-pdf-white.ps1作为中介调用 python:

  • 路径填PowerShell.exe
  • 参数写 -file \cut-white\pdf-cut-white-master\crop-pdf-white.ps1 "{action_path}"
    • 此处的action_path即是触发快捷键时鼠标焦点所在路径,也即要修的 PDF 路径。

从 Listary 提供的各功能来看,使用命令(Command)比动作更合适当前场景,但命令的路径参数和系统的环境变量混淆。用起来并不很方便,所以最后还是选择用动作实现。

参数读取脚本

接着就来实现crop-pdf-white.ps1,它需要读取一个参数作为裁剪的对象,然后自动转到 pdf-cut-white 路径下调用 python 脚本,并用新版本覆盖原始对象。powershell 脚本如下:

# 读取参数
param($oriFile)
# 转到pdf-cut-white路径下
cd \cut-white\pdf-cut-white-master
# 调用脚本,先生成一个临时的新版本
python cli.py -i $oriFile -o $oriFile-0  --ignore 2
# 用新版本覆盖旧版本
mv -Force $oriFile-0 $oriFile

注意 powershell 脚本默认是不能调用的,直接运行相当于用记事本打开,因此需要修改一下 powershell 的配置

Set-ExecutionPolicy AllSigned
Set-ExecutionPolicy RemoteSigned

这两条命令都是永久生效,不需要每次都输入。只需要在部署环境时使用管理员模式跑一次就行了。

使用快捷键

在完成上述功能后,就可以快捷剪切 PDF 了。只需要选定要选的 PDF 对象,敲一下配置好的快捷键,再重新打开这个 PDF,就已经是裁剪完白边的版本了。

Updated: