我有很多pdf文件,里面的内容位置是一样的,但是文件名是随机的。
我每次都得逐个打开pdf,再把文件名改成这个pdf里面的某部分内容。
后面我发现了Microsoft Power Automate这个软件,我设置了一下可以用,但是他必须联网,我想有没有一个能离线使用的工具能达成这个效果:
OCR识别pdf里面的一部分内容,然后把pdf重命名
离线ocr属于pdf软件的基本功能了,市面上大部分流行的pdf软件都有这个功能。
其中比较有名的 Acrobat 和 abbyy
OCR简单,但是根据PDF内容重命名文件很有难度,尤其是OCR后的内容精准提取更有难度。
几十篇就手动操作吧,可以使用预览窗口快捷查看pdf,然后重命名。
一、rename_pdfs.py脚本
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
二、需要安装的依赖:
- 安装PyMuPDF pytesseract Pillow。
pip install PyMuPDF pytesseract Pillow
- 安装 Tesseract OCR。
三、说明
请将py中设置PDF文件夹路径部分修改为pdf存放文件夹。
pdf_folder = r"......"
你试试看,这样行不? ![]()