如何用qpdf/pdftk批量修正PDF前两页后颠倒的奇偶页顺序
PDF页码错位批量修复方案
问题特征说明
所有异常PDF前2页顺序正常,从第3页开始每两页顺序互换,物理页顺序为1-2-4-3-6-5…,需批量调整为正常顺序。
方案1:qpdf 实现(推荐,维护活跃、兼容性强)
单个文件处理命令
# 替换输入输出文件名即可,自动适配任意总页数 qpdf 输入文件.pdf --pages . 1 2 $(for ((i=3; i<=$(qpdf --show-npages 输入文件.pdf); i+=2)); do ((i+1<=$(qpdf --show-npages 输入文件.pdf))) && echo -n "$((i+1)) $i " || echo -n "$i "; done) -- 输出文件.pdf
批量处理bash脚本
#!/bin/bash # 依赖:提前安装qpdf # 功能:批量处理当前目录所有未修复的PDF,输出文件名加_fixed后缀 shopt -s nullglob for pdf_file in *.pdf; do # 跳过已修复的文件和非文件项 [[ "$pdf_file" == *_fixed.pdf ]] || [[ ! -f "$pdf_file" ]] && continue output_file="${pdf_file%.pdf}_fixed.pdf" total_pages=$(qpdf --show-npages "$pdf_file") page_seq="1 2" # 生成修复后的页码序列 for ((i=3; i<=total_pages; i+=2)); do if (( i+1 <= total_pages )); then page_seq="$page_seq $((i+1)) $i" else page_seq="$page_seq $i" fi done # 执行修复 qpdf "$pdf_file" --pages . $page_seq -- "$output_file" if (( $? == 0 )); then echo "处理成功:$pdf_file → $output_file" else echo "处理失败:$pdf_file" rm -f "$output_file" 2>/dev/null fi done
方案2:pdftk 实现
单个文件处理命令
# 总页数为10的示例,可根据实际页数调整页码序列 pdftk 输入文件.pdf cat 1 2 4 3 6 5 8 7 10 9 output 输出文件.pdf
批量处理逻辑
和上述qpdf脚本逻辑一致,仅需修改执行修复的行为:
pdftk "$pdf_file" cat $page_seq output "$output_file"
页码序列获取方式不变,总页数可以通过pdftk "$pdf_file" dump_data | grep NumberOfPages | awk '{print $2}'获取。
其他无GUI替代方案
- 使用Python的
pypdf/PyPDF2库实现,适合需要自定义更复杂页码规则的场景,代码量少,跨平台兼容性好 - 使用MuPDF套件的
mutool工具,性能更高,命令逻辑和qpdf类似,支持动态拼接页码范围
内容的提问来源于stack exchange,提问作者AHellOfAJourney
相关产品推荐
相关产品推荐

