使用Tesseract与PyPDF2提取PDF数据时遇Windows路径过长ValueError
问题分析与解决
错误原因
- 核心错误:
pytesseract.image_to_string用法完全错误:该函数用于对图像文件/图像对象执行OCR识别,但你传入了从PDF提取的文本字符串。Tesseract会将这个长文本误判为文件路径,而Windows默认对文件路径长度有限制(260字符),因此触发路径过长的报错。 - 次要错误:写入
OCRdata.txt时使用了默认的只读模式(r),无法执行写入操作,后续还会触发IO错误。
解决思路
需根据PDF的实际类型选择对应处理方式:
情况1:文本型PDF(可直接复制文字)
此类PDF无需使用Tesseract,PyPDF2已能直接提取文本,直接保存提取结果即可。
情况2:扫描件/图像型PDF(无法直接复制文字)
需先将PDF每页转换为图像,再对图像执行OCR。此时需额外安装pdf2image库完成PDF转图像的操作。
修正后的代码
文本型PDF简化代码
from PyPDF2 import PdfReader pdf_path = "file_.pdf" pdf = PdfReader(open(pdf_path, "rb")) extracted_text = "" for page_number, page in enumerate(pdf.pages, start=1): print(f"processing Page {page_number}") page_text = page.extract_text() or "" # 处理页面无文本的边界情况 extracted_text += page_text # 一次性写入文件,比循环内追加更高效 with open("data.txt", "w", encoding="utf8") as dataFile: dataFile.write(extracted_text) print(extracted_text)
图像型PDF的OCR处理代码(需先安装依赖)
- 安装所需依赖库:
pip install pytesseract PyPDF2 pdf2image pillow
- 注意:
pdf2image依赖Poppler工具,Windows用户需下载Poppler并配置环境变量,或在代码中指定其路径。
import pytesseract from pdf2image import convert_from_path pdf_path = "file_.pdf" # 若未配置Poppler环境变量,添加poppler_path参数,示例: # pages = convert_from_path(pdf_path, poppler_path=r"C:\poppler-23.08.0\Library\bin") pages = convert_from_path(pdf_path) final_text = "" for page_number, img in enumerate(pages, start=1): print(f"processing Page {page_number}") # 如需识别中文,添加lang="chi_sim"参数 page_text = pytesseract.image_to_string(img) final_text += page_text # 保存OCR结果 with open("OCRdata.txt", "w", encoding="utf8") as OCRData: OCRData.write(final_text) print(final_text)
内容的提问来源于stack exchange,提问作者Devashish Rattan
相关产品推荐
相关产品推荐

