Ghostscript 适合用命令行压缩扫描件、合并多个 PDF,并把重复的文件处理流程放进批量脚本,适用于材料归档、提交文件整理和服务端自动化。它会重新生成 PDF,因此压缩率、画质以及书签、表单等内容都可能发生变化;请保留原件,并先用少量文件验证结果。

安装与准备
先安装 Ghostscript,并确认命令行能找到它。不同系统的安装包和命令名称可能不同:
- Windows:安装 Ghostscript 后,在命令提示符或 PowerShell 中试运行
gswin64c。如果提示找不到命令,可把 Ghostscript 的bin目录加入系统PATH,或在脚本中使用可执行文件的完整路径。 - macOS、Linux:通过系统软件包管理器安装后,通常使用
gs命令。可运行gs --version检查是否能调用。
处理前建议按“原件、待处理、输出”分开存放,例如:
pdf-work/
├── input/ # 原始 PDF,只读保留
├── output/ # 压缩结果或合并结果
└── scripts/ # 批处理脚本
给输出文件使用新文件名,避免覆盖输入文件。若文件包含个人信息、签名或敏感材料,也要确认运行环境和输出目录符合你的存储要求。
用命令压缩 PDF
最直接的做法是使用 Ghostscript 的 pdfwrite 设备重新生成 PDF,并选择压缩预设:
gs -sDEVICE=pdfwrite
-dCompatibilityLevel=1.4
-dPDFSETTINGS=/ebook
-dNOPAUSE -dQUIET -dBATCH
-sOutputFile=output/compressed.pdf
input/document.pdf
Windows 命令提示符通常把 gs 替换为 gswin64c;如果是在 PowerShell 中运行,也可以使用相同参数形式。
这几个参数决定了主要处理行为:
-sDEVICE=pdfwrite:将输出设备设为 PDF 写入器,生成新的 PDF。-dCompatibilityLevel=1.4:设置输出 PDF 的兼容版本。若接收方规定了版本要求,应按其要求调整。-dPDFSETTINGS=/ebook:选择一组默认的压缩和图像处理设置。常见预设包括/screen、/ebook、/printer和/prepress。通常压缩越积极,图像细节损失风险越高;预设名称不能代替实际验收。-dNOPAUSE:处理页面时不逐页暂停。-dQUIET:减少常规输出信息,排错时可先移除它。-dBATCH:处理结束后退出。-sOutputFile=...:指定输出文件路径。- 最后的
input/document.pdf:输入文件路径。
如果希望控制图像下采样,可以不使用 -dPDFSETTINGS,改为明确指定图像类型和分辨率:
gs -dBATCH -dNOPAUSE -q
-sDEVICE=pdfwrite
-dColorImageDownsampleType=/Bicubic
-dColorImageResolution=150
-dGrayImageDownsampleType=/Bicubic
-dGrayImageResolution=150
-dMonoImageDownsampleType=/Bicubic
-dMonoImageResolution=300
-sOutputFile=output/custom.pdf
input/document.pdf
这里把彩色和灰度图设为 150 DPI,黑白图设为 300 DPI,适合作为测试起点,而不是所有文件的通用标准。/Bicubic 是下采样算法选项;调整分辨率或算法后,应检查细字、线条、印章和图表等关键区域。用于印刷、放大查看或长期保存的文件,可能需要保留更高图像质量。
合并多个 PDF
将输入文件按希望出现的页面顺序列出,Ghostscript 会按这个顺序生成合并文件:
gs -dBATCH -dNOPAUSE -q
-sDEVICE=pdfwrite
-sOutputFile=output/combined.pdf
input/cover.pdf input/form.pdf input/appendix.pdf
先检查文件名顺序,尤其是从目录自动读取文件时:按字母排序可能会让 page-10.pdf 排在 page-2.pdf 前面。需要压缩时也可以给合并过程加入 -dPDFSETTINGS=/ebook 等选项,但合并和压缩会同时重新生成文件,更应该仔细验收。部分 PDF 的书签、注释、表单或其他交互内容可能无法按原样保留。
批量压缩目录中的 PDF
下面的 Bash 脚本处理指定目录的 PDF,并将结果写入单独的输出目录。它只扫描输入目录的第一层,不会递归进入子目录:
#!/usr/bin/env bash
set -euo pipefail
input_dir="${1:-input}"
output_dir="${2:-output}"
quality="${3:-ebook}"
mkdir -p "$output_dir"
shopt -s nullglob
files=("$input_dir"/*.pdf "$input_dir"/*.PDF)
if ((${#files[@]} == 0)); then
echo "没有找到 PDF:$input_dir" >&2
exit 1
fi
for file in "${files[@]}"; do
name="$(basename "$file")"
target="$output_dir/$name"
if [[ -e "$target" ]]; then
echo "跳过,输出文件已存在:$target" >&2
continue
fi
echo "处理:$file"
gs -sDEVICE=pdfwrite
-dCompatibilityLevel=1.4
"-dPDFSETTINGS=/$quality"
-dNOPAUSE -dQUIET -dBATCH
-sOutputFile="$target"
"$file"
done
保存为 scripts/compress-pdfs.sh 后,可这样运行:
bash scripts/compress-pdfs.sh input output ebook
三个参数依次是输入目录、输出目录和预设名称;不传参数时,脚本默认使用 input、output 和 ebook。Windows 环境可以在脚本中把 gs 改成 gswin64c,也可以在 PowerShell 中逐个处理文件。批量运行前,先用少量代表性文件测试,并确认输出目录有足够空间。

验收处理结果
文件体积变小不代表结果一定可用。处理后至少检查以下几项:
- 页面与画质:抽查首页、文字密集页、图表页和小字页面,并在实际查看或打印尺寸下检查清晰度。关注细线、印章、手写内容和浅色文字。
- 可搜索文本:在阅读器中搜索原 PDF 里已知的词句,并尝试复制文本。如果原文件是扫描图,是否能搜索通常还取决于是否做过 OCR;重新生成 PDF 不会自动补上缺失的识别文本。
- 书签与页面顺序:检查合并后的页数、顺序和书签。需要依赖书签导航的材料,不要只凭文件能打开就判定合格。
- 表单与注释:确认表单字段能否填写、提交,批注和链接是否仍可使用。对签名文件尤其要检查数字签名状态;重新生成文件可能影响签名有效性。
- 文件完整性:用目标阅读器打开输出文件,翻看页面边界和方向,并确认没有报错或缺页。正式提交前,按接收方要求再核对格式和兼容性。
如果输出画质变差,可尝试提高图像分辨率或改用压缩较轻的预设;如果书签、表单、注释或签名是必须保留的内容,应先用测试副本验证 Ghostscript 的处理结果,必要时选择更适合保留这些功能的工作流。

评论列表 (6条):
加载更多评论 Loading...