You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Bash批量提取多PDF指定页面生成新PDF的最优方案咨询

基于Bash批量提取多PDF指定页面生成新PDF的最优方案咨询

嘿,这个需求我太熟了——常年批量处理PDF页面的话,用pdftk或者qpdf都是非常靠谱的选择,尤其是qpdf现在更新更活跃,推荐优先考虑。下面给你详细拆解两种方案,还有适合长期复用的脚本写法:

方案一:用qpdf(推荐,现代且灵活)

qpdf是一款轻量且功能强大的PDF处理工具,支持页面提取、合并、加密等多种操作,在大多数Linux发行版里都能轻松安装:

  • Debian/Ubuntu系:sudo apt install qpdf
  • CentOS/RHEL系:sudo dnf install qpdf

针对你的需求,直接执行这条命令就能生成目标PDF:

qpdf --empty --pages a.pdf 2,5 b.pdf 3,4 c.pdf 7-9 -- output.pdf

参数解释:

  • --empty:先创建一个空的基础PDF作为容器
  • --pages:后面依次跟上源PDF文件+要提取的页面范围,多个文件用空格分隔
  • 页面范围支持:用逗号分隔单个页面(如2,5),用横杠表示连续页面(如7-9)
  • --:用来分隔参数和输出文件名,避免文件名和参数混淆
  • output.pdf:最终生成的新PDF文件名

方案二:用pdftk(经典工具,兼容性好)

pdftk是老牌的PDF工具,很多人习惯用它,现在主流是Java版本:

  • Debian/Ubuntu系:sudo apt install pdftk-java

对应你的需求,命令写法是:

pdftk a.pdf cat 2 5 b.pdf cat 3 4 c.pdf cat 7-9 output output.pdf

参数解释:

  • cat:表示要提取(拼接)指定页面的指令
  • 每个源PDF后面跟上cat+页面列表,最后用output指定输出文件

长期复用的脚本方案(适合批量重复操作)

既然你未来要处理很多不同的PDF和页面组合,写一个可复用的脚本会更高效。比如创建一个merge_pdf_pages.sh脚本:

#!/bin/bash

# 配置区域:修改这里的内容即可适配不同任务
# 格式:"PDF文件名 页面范围",每行一个任务
pdf_jobs=(
    "a.pdf 2,5"
    "b.pdf 3,4"
    "c.pdf 7-9"
)

# 指定输出文件名
output_file="merged_result.pdf"

# 使用qpdf执行合并(推荐)
qpdf --empty --pages "${pdf_jobs[@]}" -- "$output_file"

# 如果习惯用pdftk,注释上面的qpdf命令,取消下面的注释
# pdftk $(printf "%s cat %s " "${pdf_jobs[@]}") output "$output_file"

使用方法:

  1. 保存脚本后,赋予执行权限:chmod +x merge_pdf_pages.sh
  2. 每次处理新任务时,只需要修改pdf_jobs数组里的PDF文件名和页面范围
  3. 运行脚本:./merge_pdf_pages.sh

小提示

  • 确保所有源PDF文件都在脚本运行的目录下,或者写完整的文件路径(如/home/user/docs/a.pdf)
  • 页面范围不要超过PDF的总页数(你提到所有输入都是10页,这点没问题)
  • 测试时可以先输出到临时文件(如temp_output.pdf),避免误覆盖重要文件

备注:内容来源于stack exchange,提问作者lmat - Reinstate Monica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 16:23:11