由于版权的问题,我现在已经使用 pdftk 对 pdf 文件进行合并操作,但是我还是已经习惯 Acrobat 选中 pdf 文件然后右键点击合并就能合并的方式。我并不想再去搞一个复杂的脚本,在网上一番搜索以后发现已经有人做了类似的批处理脚本。本文以使用 pdftk 做右键合并菜单的方式为例,说明一下使用批处理自定义右键菜单的大体流程,以后有相类似的需求可以按照本示例修改。

下载 pdftk 并加入 PATH

pdftk server下载地址,下载后将 “pdftk.exe” 和 “libiconv2.dll” 放到 %PATH% 变量的目录(即从 cmd 下可以直接执行的目录,比如 C:\windows\system32)。

编写合并 pdf 的脚本

编写脚本文件 D:\Green\pdf合并.cmd

@echo off
setlocal enabledelayedexpansion

:: 获取设置文件名的日期、时间等
for /f "tokens=2 delims==+-" %%i in ('WMIC OS Get LocalDateTime /value ^| findstr "="') do (
  set _Date=%%i
  set YY=!_Date:~2,2!
  set MM=!_Date:~4,2!
  set DD=!_Date:~6,2!
  set HH=!_Date:~8,2!
  set MIN=!_Date:~10,2!
  set SS=!_Date:~12,2!
)

:: 设置 %today% 变量
set today=20%YY%-%MM%-%DD%-%HH%%MIN%%SS%

:: 获取所有选择的 pdf 文件并设置为变量 command
FOR %%A IN (%*) DO (set command=!command! %%A)

:: 合并 pdf 文件("%~dp1"表示下面这条命令的第二个参数的文件所在的路径)
pdftk.exe %command% cat output "%~dp1CombinedScan_%today%.pdf"

:: 删除原始的 pdf 文件
del %command%

设置右键快捷方式

网上有很多采用修改注册表的方式增加右键菜单,我这里讲一种更加简单的方式。我们选中文件后右键单击总是会出现一个发送到的菜单,然后下面有很多的子菜单,最常用的是发送到桌面快捷方式。其实 “发送到” 的子菜单就是一些快捷方式而已。

  1. 为刚才的 “合并pdf.cmd” 文件创建一个快捷方式(名字随意,比如 “合并pdf” )
  2. 将创建的快捷方式放到 sendto 文件夹( Win+R -> shell:sendto )

这样你就可以在文件管理器中选中 pdf 文件然后发送到 “合并pdf”,就可以合并 pdf 文件了。不过这种合并 pdf 的方式有两个需要注意的问题:

  1. 合并会自动按照文件管理器中所看到的顺序从上至下合并。
  2. 合并的第一个文件是选中后鼠标悬停所在的那个文件(比如我按 Ctrl+A 选中的所有的文件之后,鼠标停留在 “05.pdf” 文件上右键合并 pdf ,那么合并的 pdf 的第一页就是 “05.pdf”)。

参考文献

[1] Combine PDF files with a context menu option