无法提取PDF文本求助:PyPDF2与pymupdf均提取失败
问题分析与解决方案
核心原因
你遇到的问题是目标PDF属于图像型PDF(扫描件生成),而非原生可编辑的文本PDF。这类PDF的内容以像素图像形式存储,没有嵌入可被PyPDF2、pymupdf直接提取的文本流,所以无论用哪种普通文本提取库,都会得到空结果。
你可以自行验证:打开PDF后尝试选中文字,如果无法选中任何内容,即可确认是图像型PDF。
解决方案:使用OCR提取图像文字
要提取这类PDF的内容,必须借助OCR(光学字符识别)工具,比如Tesseract,配合Python库实现图像转文字。
步骤1:安装依赖
- 安装Tesseract OCR引擎:
- Windows:下载安装包后,将其路径加入系统环境变量(或在代码中手动指定)
- Linux:执行
sudo apt install tesseract-ocr - macOS:执行
brew install tesseract
- 安装Python库:
pip install pytesseract pymupdf
步骤2:提取文本的示例代码
import fitz # pymupdf import pytesseract # 若Tesseract未加入系统PATH,需手动指定路径(以Windows为例) # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 打开PDF文档 doc = fitz.open("favorite.pdf") # 遍历每页提取文字 for page_idx in range(len(doc)): page = doc.load_page(page_idx) # 将PDF页面转换为像素图像 pix = page.get_pixmap() # 用Tesseract识别图像中的文字(lang参数指定语言,这里用英文) extracted_text = pytesseract.image_to_string(pix.tobytes(), lang='eng') print(f"第 {page_idx+1} 页提取结果:\n{extracted_text}\n")
注意事项
- 如果PDF包含多语言内容,可在
lang参数中指定多语言包(比如lang='eng+dan'识别英文和丹麦语,需提前安装对应语言包) - 若图像清晰度较低,可先对图像做预处理(比如调整对比度、降噪)来提升OCR准确率
内容的提问来源于stack exchange,提问作者balexandre
相关产品推荐
相关产品推荐

