以下是一个使用 Python 实现对 PDF 扫描件批量识别区域内容并重命名的大致思路:
解决思路:
- 使用
pdf2image
将 PDF 页面转换为图像文件。 - 使用
pytesseract
对图像区域进行文字识别。 - 基于识别的内容对文件进行重命名。
import os
from pdf2image import convert_from_path
import pytesseract
from PIL import Image
def pdf_to_images(pdf_path):
# 将 PDF 转换为图像列表
images = convert_from_path(pdf_path)
return images
def ocr_image(image):
# 对图像进行 OCR 识别
text = pytesseract.image_to_string(image)
return text
def rename_pdf(pdf_path, output_dir):
# 获取 PDF 的文件名(不包含路径)
base_name = os.path.basename(pdf_path)
# 去掉文件扩展名
name_without_ext = os.path.splitext(base_name)[0]
images = pdf_to_images(pdf_path)
for i, image in enumerate(images):
# 对图像进行 OCR 识别
text = ocr_image(image)
# 清理识别结果,去除多余的空格和换行符
clean_text = text.strip().replace('\n','').replace(' ','')
# 构建新的文件名
new_name = f"{clean_text}_{name_without_ext}_{i}.pdf"
new_path = os.path.join(output_dir, new_name)
# 保存图像为 PDF(假设你想将图像转换回 PDF 并保存)
image.save(new_path, "PDF", resolution=100.0)
def batch_rename_pdfs(input_dir, output_dir):
# 遍历输入目录中的所有 PDF 文件
for root, dirs, files in os.walk(input_dir):
for file in files:
if file.endswith('.pdf'):
pdf_path = os.path.join(root, file)
rename_pdf(pdf_path, output_dir)
代码解释:
-
pdf_to_images(pdf_path)
函数:- 使用
pdf2image
库的convert_from_path
方法将指定pdf_path
的 PDF 文件转换为图像列表。 - 该函数会将 PDF 的每一页转换为一个
PIL
的Image
对象并存储在images
列表中。
- 使用
-
ocr_image(image)
函数:- 调用
pytesseract
的image_to_string
方法对输入的image
(PIL
的Image
对象)进行文字识别。 - 将识别出的文字作为字符串返回。
- 调用
-
rename_pdf(pdf_path, output_dir)
函数:- 首先使用
os.path.basename
获取 PDF 的文件名(不包含路径),再使用os.path.splitext
去掉文件扩展名。 - 调用
pdf_to_images
函数将 PDF 转换为图像列表。 - 遍历图像列表,对每个图像调用
ocr_image
进行 OCR 识别。 - 清理识别出的文本,去除多余的空格和换行符。
- 构建新的文件名,新文件名包含识别出的文本、原文件名和当前页码。
- 使用
image.save
方法将图像保存为 PDF 文件到指定的output_dir
中。
- 首先使用
-
batch_rename_pdfs(input_dir, output_dir)
函数:- 使用
os.walk
遍历输入目录下的所有文件。 - 对于每个以
.pdf
结尾的文件,调用rename_pdf
函数进行重命名操作。
- 使用
使用方法:
- 确保你已经安装了所需的库,可以使用
pip install pdf2image pytesseract pillow
进行安装。 - 将上述代码保存为一个 Python 文件,例如
rename_pdfs.py
。 - 调用
batch_rename_pdfs
函数,指定输入目录和输出目录,例如:
python
if __name__ == "__main__":
input_dir = "path/to/your/input/directory"
output_dir = "path/to/your/output/directory"
batch_rename_pdfs(input_dir, output_dir)
- 运行脚本,将
path/to/your/input/directory
替换为你存储 PDF 文件的实际路径,将path/to/your/output/directory
替换为你希望保存重命名文件的路径。
请注意,此代码可能会受到以下几个方面的限制:
pytesseract
的 OCR 识别准确性可能会受到图像质量、文字字体、语言等因素的影响,对于模糊、扭曲或字体不常见的文字可能识别效果不佳。pdf2image
在转换较大的 PDF 文件时可能会消耗较多的内存和时间,对于大量的 PDF 文件处理,性能可能会成为一个问题。- 此代码假设你希望将转换后的图像重新保存为 PDF 文件,如果你只是想对原 PDF 文件进行重命名而不涉及图像转换,代码需要进行相应修改。