You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python3 Windows环境下用PyPDF2/Pdfminer读取指定PDF的报错解决(禁Poppler)

嘿,我之前也碰到过不少这类PDF读取的坑,尤其是这种带加密或者特殊压缩的文件,结合你不能装Poppler的Windows Python3环境限制,给你几个纯Python的解决方案试试:

解决方案1:尝试PyPDF2的空密码解密(针对"假加密"PDF)

有些PDF会被标记为加密,但实际上并没有设置密码(也就是所谓的"假加密"),你可以试试用空密码解密后再读取:

from PyPDF2 import PdfReader

# 替换为你的PDF文件路径
pdf_path = "UCM074728.pdf"
reader = PdfReader(pdf_path)

if reader.is_encrypted:
    try:
        # 尝试空密码解密
        reader.decrypt("")
        # 提取文本
        full_text = ""
        for page in reader.pages:
            page_text = page.extract_text()
            if page_text:
                full_text += page_text
        # 打印前500个字符验证
        print(full_text[:500])
    except Exception as e:
        print(f"空密码解密失败,错误信息:{e}")
else:
    # 无加密直接提取
    full_text = ""
    for page in reader.pages:
        page_text = page.extract_text()
        if page_text:
            full_text += page_text
    print(full_text[:500])
解决方案2:使用PyMuPDF(fitz)—— 兼容性拉满的纯Python库

PyMuPDF对各种特殊PDF的支持非常好,不管是加密还是特殊压缩格式,它都能轻松处理,而且Windows下直接用pip安装就行,不需要额外依赖:
首先安装:

pip install pymupdf

然后用以下代码读取:

import fitz  # 导入PyMuPDF

pdf_path = "UCM074728.pdf"
doc = fitz.open(pdf_path)

full_text = ""
for page_num in range(doc.page_count):
    page = doc.load_page(page_num)
    full_text += page.get_text()

# 验证结果
print(full_text[:500])
doc.close()

这个方法我用得最多,很多PyPDF2和pdfminer搞不定的文件,它都能完美提取文本。

解决方案3:试试pdfplumber(pdfminer.six的增强版)

如果pdfminer本身解压有问题,pdfplumber在它的基础上做了不少优化,可能能解决解压问题:
先安装:

pip install pdfplumber

然后读取代码:

import pdfplumber

pdf_path = "UCM074728.pdf"
with pdfplumber.open(pdf_path) as pdf:
    full_text = ""
    for page in pdf.pages:
        page_text = page.extract_text()
        if page_text:
            full_text += page_text
    print(full_text[:500])

补充说明

如果以上方法都失效,那大概率这个PDF是真加密(设置了实际密码),这种情况你需要先获取正确的解密密码才能读取;但如果是无密码的"假加密",上面的方案应该能解决你的问题。

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

火山引擎 最新活动