无人小站

自用的 PDFtk 批处理脚本(2021-01-23 更新)

JP-Liu PDFtk批处理PDFDouble Commander

自用的 PDFtk 批处理脚本(2021-01-23 更新)

2021-01-23:脚本增加了 水印 和 加密 的功能。

最初在 2017 年在 PDF 处理工具 PDFTK 介绍 中提到过 PDFtk 这个命令行的 PDF 处理工具,以及 PDF Builder 这个第三方的 GUI,但是今年年初办公用的电脑抽风,每次运行 PDF Builder,在添加需要处理的文件的时候必定奔溃,只能改用 IrfanView 或是批处理调用 PDFtk 处理,干脆就自己写了一个简单的批处理脚本。

@echo off

set PDFPath=%~1

set PDFtkPath=%~dp0
set PDFtk=%PDFtkPath%\pdftk.exe
set PDFtkSourcePath=%PDFtkPath%\PDFtkSource
set PDFtkTargetPath=%PDFtkPath%\PDFtkTarget

::设置加密时使用的密码
set user_pw=123456

echo PDFtk List
echo.
echo 1. PDF 截取
echo 2. PDF 分拆
echo 3. PDF 合并
echo 4. PDF 压缩
echo 5. PDF 旋转
echo 6. PDF 加水印
echo 7. PDF 加密
echo.
set /p choose=请选择处理方式:
if "%choose%"=="1" Goto PDFtkCAT
if "%choose%"=="2" Goto PDFtkBRUST
if "%choose%"=="3" Goto PDFtkCOMBINE
if "%choose%"=="4" Goto PDFtkCOMPRESS
if "%choose%"=="5" Goto PDFtkROTATE
if "%choose%"=="6" Goto PDFtkMULTISTAMP
if "%choose%"=="7" Goto PDFtkPW
exit

:PDFtkCAT
if defined PDFPath ( echo 脚本启动时已带入路径: %1) else set /p PDFPath=请输入需要处理的 PDF 文件并回车:
set /p PDFtkCAT=请输入需要截取的页数(支持 1 2 或 1-3 或 2-end):
cd %PDFtkTargetPath%
echo 正在处理 %PDFPath%
::%PDFtk% %PDFPath% cat %PDFtkCAT% output %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%-CAT.pdf
%PDFtk% "%PDFPath%" cat %PDFtkCAT% output "%PDFPath%-CAT.pdf"
exit

:PDFtkBRUST
if defined PDFPath ( echo 脚本启动时已带入路径: %1) else set /p PDFPath=请输入需要处理的 PDF 文件并回车:
echo 正在处理 %PDFPath%
%PDFtk% "%PDFPath%" burst output %PDFtkTargetPath%/page_%%04d.pdf
del doc_data.txt
exit

:PDFtkCOMBINE
echo 请确认所有需要合并的文件已按顺序命名并放入 %PDFtkSourcePath% 内。
pause.
cd %PDFtkTargetPath%
%PDFtk% %PDFtkSourcePath%\*.pdf cat output %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%-COMBINED.pdf
echo 正在处理 %PDFPath%
exit

:PDFtkCOMPRESS
if defined PDFPath ( echo 脚本启动时已带入路径: %1) else set /p PDFPath=请输入需要处理的 PDF 文件并回车:
cd %PDFtkTargetPath%
echo 正在处理 %PDFPath%
::%PDFtk% %PDFPath% output %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%-COMPRESS.pdf compress
%PDFtk% "%PDFPath%" output "%PDFPath%-COMPRESS.pdf" compress
exit

:PDFtkROTATE
echo 实例:
echo 1east 2-end:第一页顺时针旋转 90 度。
echo 1-endsouth:整个文件旋转 180 度。
if defined PDFPath ( echo 脚本启动时已带入路径: %1) else set /p PDFPath=请输入需要处理的 PDF 文件并回车:
set /p PDFtkROTATECAT=请输入旋转参数:
cd %PDFtkTargetPath%
echo 正在处理 %PDFPath%
::%PDFtk% %PDFPath% cat %PDFtkROTATECAT% output %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%-ROTATE.pdf
%PDFtk% "%PDFPath%" cat %PDFtkROTATECAT% output "%PDFPath%-ROTATE.pdf"
exit

:PDFtkMULTISTAMP
echo.
echo 水印 PDF 文件(watermark.pdf)请放在 PDFtk.exe 的同一目录
echo.
pause
for /r %PDFtkSourcePath% %%a in (*.pdf) do (
    echo 正在给 %%~na 加水印
	%PDFtk% "%%a" multistamp watermark.pdf output %PDFtkTargetPath%\%%~na-WM.pdf
	echo.
    )
exit

:PDFtkPW
echo.
echo 默认设置用户密码,且允许复制内容,如需调整密码或变更参数,请打开脚本修改。
:: allow 后面为参数,表示允许相关功能
:: 留空 不允许下述功能 / AllFeatures 允许下述说用功能
:: Printing 打印(高质量)
:: DegradedPrinting 打印(低质量)
:: ModifyContents 修改内容
:: CopyContents 复制内容
:: ModifyAnnotations 修改提示
:: FillIn 填入内容
echo.
pause
for /r %PDFtkSourcePath% %%a in (*.pdf) do (
    echo 正在给 %%~na 加密
	%PDFtk% "%%a" output %PDFtkTargetPath%\%%~na-PW.pdf user_pw %user_pw% allow printing copycontents
	echo.
    )
exit

实际上我自己用得并不多,毕竟遇到要处理 PDF 的情景也不多……

和 PDF Builder 不同,批处理可以通过 %1 传入参数,所以可以在 Double Commander 或是 Sumatra PDF 中调用。

Double Commander 工具栏按钮

需要根据实际位置调整路径。

  • Tooktips:PDFtk 处理(&P)

  • Command:%COMMANDER_PATH%..\0-CommandLineTools\PDFtk\PDFtk.bat

  • Parameters:%ps

  • StartPath:%COMMANDER_PATH%..\0-CommandLineTools\PDFtk

Sumatra PDF Setting

在 Setting 中加入以下内容 CommandLine 是批处理文件的路径,Name 是文件名,Filter 是当 Sumatra PDF 打开什么类型的文件时会出现:

ExternalViewers [
	[
		CommandLine = D:\1-Program\0-CommandLineTools\PDFtk\PDFtk.bat
		Name = PDFtk
		Filter = *.pdf
	]
JP-Liu
懒人一个