对多个pdf合同文件批量命名

对以下多个pdf合同文件批量识别pdf中的合同号并以合同号命名文件

需要先下载安装Tesseract,才能用 OCR 功能,

下载后安装时,一定要勾选 中文语言包(chi_sim)

jupyter notebook安装对应软件包:

完整代码如下:

python 复制代码
pip install pymupdf pillow pytesseract opencv-python

# 测试引擎路径对不对
import pytesseract
# 填你的安装路径,默认是下面这个
pytesseract.pytesseract.tesseract_cmd = r"E:\Program Files\Tesseract-OCR\tesseract.exe"

# 测试是否能正常调用
print("Tesseract 版本:", pytesseract.get_tesseract_version())
python 复制代码
import os
import re
import fitz
from PIL import Image
import pytesseract

# ===================== 配置项(你只需要改这里) =====================
PDF_FOLDER = r"D:\XXXXX\扫描PDF批量合同号命名"
pytesseract.pytesseract.tesseract_cmd = r"E:\Program Files\Tesseract-OCR\tesseract.exe"
# ==================================================================

def pdf_first_page_ocr(pdf_path):
    """读取PDF第一页,转图片并OCR识别文字"""
    doc = fitz.open(pdf_path)
    page = doc[0]
    mat = fitz.Matrix(2.0, 2.0)  # 提高清晰度
    pix = page.get_pixmap(matrix=mat)
    img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
    text = pytesseract.image_to_string(img, lang='chi_sim+eng')
    doc.close()
    return text

def get_contract_number(text):
    """从识别文本中提取合同编号(8-15位数字)"""
    # 优先匹配:合同编号 + 数字
    pattern = r"合同编号.*?(\d{8,15})"
    match = re.search(pattern, text, re.DOTALL)
    if match:
        return match.group(1)
    
    # 兜底匹配:连续8-15位长数字
    numbers = re.findall(r"\d{8,15}", text)
    if numbers:
        return numbers[0]
    return None

# ===================== 批量处理主逻辑 =====================
if __name__ == "__main__":
    print("===== 扫描PDF合同号批量重命名工具 =====")
    print(f"目标文件夹:{PDF_FOLDER}\n")

    for filename in os.listdir(PDF_FOLDER):
        # 只处理PDF文件
        if not filename.lower().endswith(".pdf"):
            continue

        old_path = os.path.join(PDF_FOLDER, filename)
        print(f"正在处理:{filename}")

        try:
            # OCR识别
            text = pdf_first_page_ocr(old_path)
            contract_num = get_contract_number(text)

            if not contract_num:
                print("  → 未识别到合同编号,跳过\n")
                continue

            # 生成新文件名
            new_name = f"{contract_num}.pdf"
            new_path = os.path.join(PDF_FOLDER, new_name)

            # 重名自动加后缀(不覆盖)
            count = 1
            while os.path.exists(new_path):
                new_name = f"{contract_num}_{count}.pdf"
                new_path = os.path.join(PDF_FOLDER, new_name)
                count += 1

            # 执行重命名
            os.rename(old_path, new_path)
            print(f"  → 重命名成功:{os.path.basename(new_path)}\n")

        except Exception as e:
            print(f"  → 处理失败:{str(e)}\n")

运行结果如下

相关推荐
随手工具-Excel, pdf, SQL13 小时前
多个 PDF 怎么合并成一个?免费在线工具,还能混入图片和 Word
pdf·word·效率工具·在线工具·pdf合并·合并pdf
2601_9659128313 小时前
PDF加水印工具实测:2026年国内免费方案对比
pdf
AmyLin_200116 小时前
PDF 色彩保真工程实践【3】上手实践:工程结构、依赖集成与一键构建运行
c++·visualstudio·pdf·zlib·vcpkg·libtiff·cmyk
2601_9659128316 小时前
PDF转Word技术选型:2026年文档解析引擎性能对比与集成评估
pdf·word
鸿翼Macrowing1 天前
**从一份 PDF 到一次 API 调用:企业 AI 能力的“最后一公里“**
人工智能·pdf·agent·数据治理·skill
工具派2 天前
发PDF给外部前先做脱敏:我用在线工具批量涂黑了身份证号和姓名(实操记录)
pdf
南风微微吹2 天前
【英一】考研英语一历年真题及答案解析PDF(1980-2026年)
考研·pdf
界面开发小八哥2 天前
界面控件DevExpress Office & PDF File v26.1新版亮点 - 全新的条码生成API
pdf·.net·devexpress·ui开发·文档控件·.net 10
'pi%'2 天前
LangGraph 多智能体实战:搭建电力政策跟踪 Agent,实现网页爬虫、OCR 与 PDF 文档自动化解析
爬虫·pdf·ocr
DevOpenClub3 天前
用网页快照、静态 HTML 和 PDF 转换接口构建网页归档 Agent
前端·人工智能·pdf·html