You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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处理代码(需先安装依赖)

  1. 安装所需依赖库:
pip install pytesseract PyPDF2 pdf2image pillow
  1. 注意: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:12:13