大家好,这里是"本地大模型,离线办公智能体广场"。平时整理合同、发票、标书、论文附件时,最麻烦的往往不是"合并 PDF",而是"到底该按什么顺序合并"。
文件名带编号还好处理;如果需要按开票日期、合同编号、金额、封面目录正文附录顺序来合并,手工逐份打开核对会非常耗时间。今天分享一套本地、离线的 PDF 智能合并方案。
它可以在本机处理 PDF:按文件名、数字、正文日期、合同编号、文件属性或指定顺序排序,再合并为一个 PDF。扫描件没有文字层时,也可以通过 OCR 识别正文信息后排序。
一、需求分析
现在手里有一批合同附件,文件名没有规律,但正文中包含"合同编号"和"签订日期"。现在需要完成以下工作:
- 按合同编号排序后合并;
- 如果有扫描件,也要能识别正文中的编号;
如果只靠普通 PDF 合并软件,通常只能按当前文件顺序拼接。要按正文内容排序,只能手工打开每份文件查看、记录,再拖拽调整顺序,文件一多就很容易漏掉或排错。
准备的一批带合并的PDF 如下:

每一个PDF 里面都是一张一张的图片。且有字段 合同编号,如下图:

二、实现方案一:小白上手
打开鲸闲办公智能体广场,找到 "PDF智能合并",如图:
注意,首次使用需要下载千问3模型到本地,后续可断网使用!!!

**获取: 宫中&浩气: "老罗软件"。**首先,我们直接输入提示词描述就可以了,要点就是说明好你的合并的顺序就行。

执行时,可以是网络断开的环境,但是第一次执行会自动下载OCR模型到本地(需要网络),以后使用就无需下载和联网了。
三、支持的功能梳理
PDF 合并智能体不只是把文件拼到一起,更重要的是可以先按需求整理顺序。
按数字或文件名合并
适合章节、附件、编号文件。
把这些 PDF 合并成一个
按数字从大到小合并
按文件名升序合并
和资源管理器里一样按名称排序合并
例如 第1章.pdf、第2章.pdf、第10章.pdf,按数字顺序会排成 1、2、10;按文件名排序则可能排成 1、10、2。
按文件名中的编号合并
适合编号藏在固定文件名格式里的情况。
按"第N章"的章节号从小到大合并
文件名里括号内的编号从小到大合并
例如文件名为"报告(01).pdf""报告(02).pdf",可以按括号内编号排序。
按正文日期合并
适合发票、报销单、凭证、档案等文件。
按开票日期从早到晚合并
按单据日期从晚到早合并
按第 2 页上的凭证日期合并
这类需求不依赖文件名,而是读取 PDF 正文中的日期。扫描件也可以在 OCR 配置完成后识别。
按正文中的字段合并
适合合同、订单、客户资料、金额清单等文件。
按合同编号排序合并
按金额从大到小合并
按第 3 页上的客户名排序合并
如果某份 PDF 找不到指定字段,智能体会停止处理并提示缺少字段的文件,避免生成顺序错误的合并结果。
按文件结构合并
适合标书、合同、报告、论文附件等有固定结构的材料。
按封面、目录、正文、附录的顺序合并
按标书结构顺序合并
智能体会识别每份文件在整套材料中的角色,再按常见文档结构排列。
按文件属性合并
适合只关心文件本身信息的场景。
按文件修改时间从早到晚合并
按文件大小从大到小合并
按创建时间合并
按指定顺序合并
如果顺序已经明确,直接点名即可。
先合并封面.pdf,再正文.pdf,最后附录.pdf
按 A.pdf、B.pdf、C.pdf 的顺序合并
智能体会严格按你写出的顺序处理。
指定输出文件名
可以直接在提示词里说明合并后的文件名。
把这些 PDF 合并成 报销汇总.pdf
按合同编号排序合并,合并后叫 2024合同集.pdf
未指定名称时,默认输出为"合并.pdf"。
四、实现方案二:Python 脚本
如果合并规则固定,例如每天都要把一批按编号命名的 PDF 合并成一个文件,也可以用 Python 脚本完成。
这个方案适合文件名规则清楚、处理步骤固定的场景。例如按文件名中的数字排序后合并,下面的代码可以直接使用:
import re
from pathlib import Path
import fitz # pip install pymupdf
# PDF 所在目录
input_dir = Path(r"path\to\your\pdfs")
# 输出文件
output_file = Path(r"path\to\your\output\merged.pdf")
output_file.parent.mkdir(parents=True, exist_ok=True)
def natural_key(path: Path):
"""按文件名中的数字自然排序:2 排在 10 前面"""
parts = re.split(r"(\d+)", path.stem)
return [int(part) if part.isdigit() else part.lower() for part in parts]
pdf_files = sorted(input_dir.glob("*.pdf"), key=natural_key)
if len(pdf_files) < 2:
raise RuntimeError("至少需要 2 个 PDF 文件才能合并")
merged = fitz.open()
for pdf_path in pdf_files:
print(f"正在合并:{pdf_path.name}")
source = fitz.open(pdf_path)
merged.insert_pdf(source)
source.close()
merged.save(output_file)
merged.close()
print(f"合并完成:{output_file}")
脚本方案的优点是规则固定、可重复执行,适合接入内部流程;不足是每增加一种排序要求,都需要自己改代码。比如按合同编号、开票日期、封面目录正文顺序合并,还需要额外写正文提取、OCR 和排序逻辑。
五、总结
日常 PDF 合并,真正难的不是"合并",而是"正确排序"。
如果只是按数字、文件名或指定顺序合并,本地智能体可以直接完成;如果需要按开票日期、合同编号、金额、文件结构等正文信息排序,也可以通过读取文字层或 OCR 识别后处理。整个过程可在本地、断网环境下运行,原 PDF 不会被修改。
规则固定、需要反复执行的任务可以考虑 Python 脚本;文件类型多、排序条件经常变化,或者需要读取扫描件正文时,直接用智能体更省事。
对于合同、发票、标书等正式材料,合并完成后建议抽查首页、关键页和文件总页数,确认顺序无误后再归档或提交。