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




