# 求一款OCR处理PDF软件

**URL:** <https://meta.appinn.net/t/topic/61749>\
**Category:** 问题求助\
**Created:** [2024 年10 月 8 日 02:57 UTC](https://meta.appinn.net/t/topic/61749 "2024-10-08T02:57:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

作者： ![iewnap](https://meta-edge.appinn.com/letter_avatar_proxy/v4/letter/i/e0b2c6/32.png) [@iewnap](https://meta.appinn.net/u/iewnap)\
发布日期： [2024 年10 月 8 日 02:57 UTC](https://meta.appinn.net/t/topic/61749/1 "2024-10-08T02:57:04Z")

</div>

我有很多pdf文件，里面的内容位置是一样的，但是文件名是随机的。  
我每次都得逐个打开pdf，再把文件名改成这个pdf里面的某部分内容。  
后面我发现了Microsoft Power Automate这个软件，我设置了一下可以用，但是他必须联网，我想有没有一个能离线使用的工具能达成这个效果：  
OCR识别pdf里面的一部分内容，然后把pdf重命名

---

<div class="post-metadata">

作者： ![czz404](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/czz404/32/30682_2.png) [@czz404](https://meta.appinn.net/u/czz404)\
发布日期： [2024 年10 月 8 日 03:17 UTC](https://meta.appinn.net/t/topic/61749/2 "2024-10-08T03:17:30Z")

</div>

离线ocr属于pdf软件的基本功能了，市面上大部分流行的pdf软件都有这个功能。  
其中比较有名的 Acrobat 和 abbyy

---

<div class="post-metadata">

作者： ![Cycadaceae](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/cycadaceae/32/50637_2.png) [@Cycadaceae](https://meta.appinn.net/u/Cycadaceae)\
发布日期： [2024 年10 月 8 日 04:13 UTC](https://meta.appinn.net/t/topic/61749/3 "2024-10-08T04:13:47Z")

</div>

OCR简单，但是根据PDF内容重命名文件很有难度，尤其是OCR后的内容精准提取更有难度。

几十篇就手动操作吧，可以使用预览窗口快捷查看pdf，然后重命名。

---

<div class="post-metadata">

作者： ![mpsxx](https://meta-edge.appinn.com/user_avatar/meta.appinn.net/mpsxx/32/58075_2.png) [@mpsxx](https://meta.appinn.net/u/mpsxx)\
发布日期： [2024 年10 月 16 日 06:49 UTC](https://meta.appinn.net/t/topic/61749/4 "2024-10-16T06:49:45Z")

</div>

## 一、rename\_pdfs.py脚本

```auto
import fitz # PyMuPDF
import os
import pytesseract
from PIL import Image
import io
import re

# 确保Tesseract路径正确
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def extract_text_from_pdf(pdf_path, page_num=0):
    doc = fitz.open(pdf_path)
    page = doc.load_page(page_num)
    
    # 提取PDF的文本和字体信息
    text_instances = page.get_text("dict")["blocks"]
    
    # 如果没有提取到文本，尝试OCR
    if not text_instances:
        pix = page.get_pixmap()
        img = Image.open(io.BytesIO(pix.tobytes("png")))
        text = pytesseract.image_to_string(img)
        doc.close()
        return text.strip()
    
    doc.close()
    return text_instances

def identify_title(text_instances):
    title = ""
    max_font_size = 0
    
    for block in text_instances:
        if block["type"] == 0: # 文本块
            for line in block["lines"]:
                for span in line["spans"]:
                    if span["size"] > max_font_size:
                        max_font_size = span["size"]
                        title = span["text"]
    
    return title.strip()

def clean_filename(filename):
    # 移除不允许在文件名中使用的字符
    filename = re.sub(r'[\\/*?:"<>|]', "", filename)
    # 将空格替换为下划线
    filename = filename.replace(" ", "_")
    # 限制文件名长度
    return filename[:50]

def rename_pdf(pdf_folder):
    for filename in os.listdir(pdf_folder):
        if filename.endswith(".pdf"):
            pdf_path = os.path.join(pdf_folder, filename)
            print(f"正在处理文件: {filename}")

            # 提取PDF中的文本和字体信息
            extracted_info = extract_text_from_pdf(pdf_path)

            # 如果是OCR结果（字符串），直接使用前20个字符
            if isinstance(extracted_info, str):
                new_filename = clean_filename(extracted_info[:20])
            else:
                # 识别标题
                title = identify_title(extracted_info)
                new_filename = clean_filename(title)

            # 如果新文件名为空，使用原文件名
            if not new_filename:
                new_filename = os.path.splitext(filename)[0]

            new_path = os.path.join(pdf_folder, new_filename + ".pdf")

            # 重命名文件
            os.rename(pdf_path, new_path)
            print(f"文件重命名为: {new_filename}.pdf")

# 设置PDF文件夹路径
pdf_folder = r"d:\我的文档\桌面\rename_pdfs"

# 执行重命名操作
rename_pdf(pdf_folder)

# 运行脚本命令：python rename_pdfs.py

```

## 二、需要安装的依赖：

1. 安装 **PyMuPDF pytesseract Pillow** 。

```auto
pip install PyMuPDF pytesseract Pillow

```

1. 安装 **[Tesseract OCR](https://gitcode.com/gh_mirrors/te/tesseract/overview?utm_source=csdn_github_accelerator)**。

## 三、说明

请将py中设置PDF文件夹路径部分修改为pdf存放文件夹。  
`pdf_folder = r"......"`

你试试看，这样行不？ :rofl:
