使用GhostScript批量添加PDF页码失败,求助故障排查
批量为PDF添加“当前页/总页数”页码的问题排查与修复
问题背景
需要为约10万份PDF批量添加格式为“当前页/总页数”的页码,编写了批处理脚本和PostScript脚本,但执行后未生成目标文件,且无任何报错提示。
排查与修复步骤
1. 开启错误输出定位问题
原批处理命令中使用了-dQUIET参数,会屏蔽GhostScript所有输出信息,导致无法得知执行失败原因。立即移除该参数,重新执行脚本即可看到具体错误提示,快速定位问题。
2. 删除GhostScript命令的冗余配置
原命令中重复设置了字体和showpage钩子逻辑,会与PostScript脚本内的代码冲突,需删除以下冗余内容:
-c "/Times-Roman findfont 12 scalefont setfont" -c "/showpage {showpage /PageCount 1 add def} def"
3. 修复PostScript脚本的逻辑缺陷
原脚本仅显示当前页码,未实现“当前页/总页数”格式,且EndPage的触发条件错误(2 eq对应页面被中断的场景,并非正常分页)。修正后的脚本如下:
% 先获取文档总页数 /PageCount 0 def { currentpagedevice /PageCount get dup PageCount gt { /PageCount exch def } if } loop /pageNum 1 def << /EndPage { % 1 eq 表示当前页面正常结束 1 eq { gsave % 设置灰色字体 0.5 setgray /Times-Roman findfont 12 scalefont setfont % 定位到页面左下角(72单位=1英寸,36对应0.5英寸) 72 36 moveto % 拼接当前页/总页数字符串并显示 pageNum 40 string cvs ( / ) concat PageCount 40 string cvs concat show grestore % 页码自增 /pageNum pageNum 1 add def true % 返回true表示继续处理后续页面 } if } bind >> setpagedevice
4. 修正后的完整批处理脚本
@echo off setlocal REM 检查输入参数是否完整 if "%~1"=="" ( echo 使用方法: %0 input.pdf output.pdf exit /b 1 ) if "%~2"=="" ( echo 使用方法: %0 input.pdf output.pdf exit /b 1 ) REM 设置输入输出文件路径 set INPUT_PDF=%~1 set OUTPUT_PDF=%~2 REM 指定PostScript脚本路径 set PSF_SCRIPT="C:\Temp\GhostScript\AddPageNum.ps" REM 执行GhostScript添加页码(添加-dNOSAFER确保脚本可被读取) "C:\Program Files\gs\gs9.53.3\bin\gswin64c.exe" -o %OUTPUT_PDF% -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -dPDFFitPage -dNOSAFER -f %INPUT_PDF% -f %PSF_SCRIPT% endlocal echo 页码已添加至 %OUTPUT_PDF%
批量处理优化建议(针对10万份PDF)
- 编写文件夹遍历逻辑,自动批量处理目录下所有PDF,无需手动逐个输入参数
- 确保
C:\Temp\GhostScript目录存在,避免脚本找不到PostScript文件 - 处理大体积PDF时,可添加
-dPDFSETTINGS=/default参数平衡输出文件的大小与质量
内容的提问来源于stack exchange,提问作者Peter Sun
相关产品推荐
相关产品推荐

