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

使用PyPDF4读取PDF文本出现乱码,寻求解决方法及替代工具

解决PyPDF4提取PDF文本乱码问题的方案

针对PyPDF4的排查与修复

  • 尝试编码转码:部分PDF采用非标准字体编码,PyPDF4提取后可能出现编码错位,可尝试对提取的文本进行编码转换:
    # 在提取文本后添加转码逻辑
    raw_text = pageObj.extractText()
    # 尝试常见编码组合,比如latin-1转gbk/utf-8
    try:
        text = raw_text.encode('latin-1').decode('gbk')
    except UnicodeDecodeError:
        try:
            text = raw_text.encode('latin-1').decode('utf-8')
        except UnicodeDecodeError:
            text = raw_text  # 保留原始文本,避免报错
    
  • 更新PyPDF4版本:旧版本可能存在编码兼容缺陷,执行pip install --upgrade PyPDF4升级到最新版再测试。

替代的Python PDF处理包

如果PyPDF4无法解决问题,以下包对复杂编码PDF的文本提取支持更稳定:

1. PyMuPDF(fitz)

文本提取精度高,对各类编码和复杂PDF兼容性好:

import glob
import fitz

relevant_path = 'C:\\_Personal\\Mega\\PycharmProjects\\PDFHandler\\docs\\input\\'

if __name__ == '__main__':
    for PDFFile in glob.iglob(relevant_path + '*.pdf', recursive=True):
        print('Processing File: ' + PDFFile.split('\\')[-1])
        doc = fitz.open(PDFFile)
        num_pages = len(doc)
        print(num_pages)
        text = ''
        for page in doc:
            text += page.get_text()
        print(text)

安装命令:pip install pymupdf

2. pdfplumber

专注文本提取,能保留文本布局,编码处理能力较强:

import glob
import pdfplumber

relevant_path = 'C:\\_Personal\\Mega\\PycharmProjects\\PDFHandler\\docs\\input\\'

if __name__ == '__main__':
    for PDFFile in glob.iglob(relevant_path + '*.pdf', recursive=True):
        print('Processing File: ' + PDFFile.split('\\')[-1])
        with pdfplumber.open(PDFFile) as pdf:
            num_pages = len(pdf.pages)
            print(num_pages)
            text = ''
            for page in pdf.pages:
                text += page.extract_text()
        print(text)

安装命令:pip install pdfplumber

3. pdfminer.six

pdfminer的Python3分支,可自定义编码参数,适配更多特殊PDF:

import glob
from pdfminer.high_level import extract_text

relevant_path = 'C:\\_Personal\\Mega\\PycharmProjects\\PDFHandler\\docs\\input\\'

if __name__ == '__main__':
    for PDFFile in glob.iglob(relevant_path + '*.pdf', recursive=True):
        print('Processing File: ' + PDFFile.split('\\')[-1])
        text = extract_text(PDFFile)
        print(text)

安装命令:pip install pdfminer.six

内容的提问来源于stack exchange,提问作者Spiffo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:55:17