如何单独裁剪PDF每页?求Kubuntu下Linux命令行自动修边方案
解决Kubuntu下命令行自动单独裁剪多页PDF边距的方案
我在Kubuntu环境里处理过不少PDF批量裁剪的需求,既然pdfcrop没法满足你每页单独裁剪的要求,给你推荐两个实用的命令行方案,亲测在14.04版本下可行:
方案一:用Mutool快速自动裁剪(推荐)
Mutool是MuPDF套件里的工具,能自动识别每页的内容边界,单独裁剪掉空白边距,操作简单高效。
- 先安装依赖:
sudo apt-get update && sudo apt-get install mupdf-tools
- 执行裁剪命令:
mutool clean -c -s 你的输入文件.pdf 裁剪后的输出文件.pdf
-c参数:开启自动裁剪空白区域-s参数:强制对每页单独进行裁剪处理,不会用全局的裁剪规则
这个命令会自动分析每页的内容范围,精准裁掉多余边距,不需要手动设置参数,适合大多数场景。
方案二:用Ghostscript+Pdftk自定义裁剪(灵活可控)
如果需要更精细的控制,比如手动调整裁剪框,或者Mutool的自动裁剪不符合预期,可以用这个脚本化的方案:
- 先安装所需工具:
sudo apt-get install ghostscript pdftk
- 创建一个bash脚本(比如
crop_pdf_pages.sh),内容如下:
#!/bin/bash # 替换成你的输入PDF路径 INPUT="input.pdf" # 替换成你想要的输出PDF路径 OUTPUT="cropped_output.pdf" # 创建临时目录存放单页文件 TMPDIR=$(mktemp -d) # 获取PDF总页数 PAGES=$(gs -q -dNODISPLAY -c "($INPUT) (r) file runpdfbegin pdfpagecount = quit") # 遍历每页进行裁剪 for ((i=1; i<=PAGES; i++)); do # 尝试获取当前页的CropBox,如果没有则用MediaBox CROPBOX=$(gs -q -dNODISPLAY -c "($INPUT) (r) file runpdfbegin $i pdfgetpage /CropBox get {print} forall quit") if [ -z "$CROPBOX" ]; then CROPBOX=$(gs -q -dNODISPLAY -c "($INPUT) (r) file runpdfbegin $i pdfgetpage /MediaBox get {print} forall quit") fi # 裁剪当前页并保存到临时目录 gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dFirstPage=$i -dLastPage=$i \ -dFIXEDMEDIA -dPDFFitPage -sOutputFile="$TMPDIR/page_$i.pdf" \ -c "<</CropBox [$CROPBOX]>> setpagedevice" -f "$INPUT" done # 合并所有裁剪后的单页PDF pdftk "$TMPDIR"/*.pdf cat output "$OUTPUT" # 清理临时文件 rm -rf "$TMPDIR" echo "裁剪完成!输出文件:$OUTPUT"
- 给脚本添加执行权限并运行:
chmod +x crop_pdf_pages.sh ./crop_pdf_pages.sh
这个脚本会单独处理每一页,提取页面的原始裁剪框(如果没有则用媒体框),然后用Ghostscript裁剪,最后合并成完整PDF。你也可以修改脚本里的CROPBOX参数,手动指定每页的裁剪范围(格式为x1 y1 x2 y2,比如50 50 550 750)。
注意事项
- 先拿少量页面的PDF测试命令,确保效果符合预期再处理大文件
- 如果你的Kubuntu 14.04软件源里的工具版本较旧,可以考虑添加PPA更新,但上述方案在默认源下应该能正常运行
内容的提问来源于stack exchange,提问作者Make42
相关产品推荐
相关产品推荐

