如何用pdftk脚本将多页PDF拆分为单个单页PDF?
使用pdftk拆分多页PDF为单页文件的方案
快速拆分(无需脚本)
如果不需要自定义输出文件名,直接用pdftk的burst命令就能快速搞定:
pdftk 你的大型PDF文件.pdf burst
执行后会在当前目录生成一系列以pg_0001.pdf、pg_0002.pdf命名的单页PDF,同时会生成一个doc_data.txt文件记录原PDF的元数据。
自定义命名的脚本方案
要是你想让输出文件用更直观的命名(比如原文件名_0001.pdf这种格式),可以用下面的脚本:
Linux/macOS/WSL 下的 Bash 脚本
#!/bin/bash # 检查是否传入了PDF文件参数 if [ $# -ne 1 ]; then echo "用法: $0 <要拆分的PDF文件路径>" exit 1 fi INPUT_FILE="$1" # 获取不带扩展名的原文件名 FILE_NAME=$(basename "$INPUT_FILE" .pdf) # 读取PDF总页数 TOTAL_PAGES=$(pdftk "$INPUT_FILE" dump_data | grep NumberOfPages | awk '{print $2}') # 循环提取每一页 for PAGE in $(seq 1 "$TOTAL_PAGES"); do # 把页码格式化为4位数字(比如1→0001,10→0010) PAGE_NUM=$(printf "%04d" "$PAGE") OUTPUT_FILE="${FILE_NAME}_${PAGE_NUM}.pdf" pdftk "$INPUT_FILE" cat "$PAGE" output "$OUTPUT_FILE" echo "已导出: $OUTPUT_FILE" done
使用步骤:
- 把上面的内容保存为
split_pdf.sh - 给脚本添加执行权限:
chmod +x split_pdf.sh - 运行脚本:
./split_pdf.sh 你的大型PDF文件.pdf
Windows 下的批处理脚本
@echo off setlocal enabledelayedexpansion :: 检查是否传入PDF文件 if "%~1"=="" ( echo 用法: %0 要拆分的PDF文件路径 exit /b 1 ) set "INPUT_FILE=%~1" set "FILE_NAME=%~n1" :: 获取PDF总页数 for /f "tokens=2" %%a in ('pdftk "%INPUT_FILE%" dump_data ^| findstr NumberOfPages') do set "TOTAL_PAGES=%%a" :: 循环导出每一页 for /l %%p in (1,1,%TOTAL_PAGES%) do ( :: 格式化页码为4位数字 set "PAGE_NUM=000%%p" set "PAGE_NUM=!PAGE_NUM:~-4!" pdftk "%INPUT_FILE%" cat %%p output "%FILE_NAME%_!PAGE_NUM!.pdf" echo 已导出: %FILE_NAME%_!PAGE_NUM!.pdf )
使用步骤:
- 保存为
split_pdf.bat - 双击运行,或者在命令行输入
split_pdf.bat 你的大型PDF文件.pdf
注意事项
- 确保已经安装pdftk:
- Debian/Ubuntu 系:
sudo apt install pdftk - macOS 可以用Homebrew安装:
brew install pdftk-java(新版pdftk基于Java) - Windows 可以直接下载pdftk的二进制包安装
- Debian/Ubuntu 系:
内容的提问来源于stack exchange,提问作者hornetster
相关产品推荐
相关产品推荐

