Windows7下Python2.7提取LibreOffice生成PDF文本异常求助
解决Windows下Python 2.7提取LibreOffice生成PDF文本的乱码与编码错误问题
我完全懂你的困扰——不同PDF生成器的文本存储逻辑差异很大,PyPDF2在处理LibreOffice这类工具生成的文件时确实容易栽跟头,而Python2.7默认的ASCII编码又会给PDFMiner添乱。下面给你两个简单可行的Windows专属解决方案:
方案一:改用PyMuPDF(fitz)——最省心的选择
PyMuPDF对各种PDF的兼容性远优于PyPDF2和旧版PDFMiner,尤其是处理LibreOffice生成的文件,提取文本几乎不会出现乱码,而且安装和使用都很简单。
- 安装适配Python2.7的PyMuPDF版本
在命令行执行以下命令(1.19.6是支持Python2.7的最后一个稳定版本):
pip install pymupdf==1.19.6
- 替换你的提取代码
import fitz # 即PyMuPDF filePath = "你的PDF文件路径" pageText = "" doc = fitz.open(filePath) # 逐页提取文本 for page in doc: pageText += "\n" + page.get_text() doc.close() # 复用你原有的字符串检测逻辑 extInfo = pageText # 原代码里逐个字符拼接的循环完全多余,直接赋值即可 stringPresent = string2search.replace(' ','') in extInfo
这个方案能直接解决乱码问题,而且编码处理更友好,不会轻易触发ASCII编码错误。
方案二:修复PDFMiner的Unicode编码错误
如果你坚持要用PDFMiner,只需手动指定编码,避开Python2.7默认的ASCII限制即可:
- 安装Python2.7兼容的PDFMiner版本
pip install pdfminer==20191125
- 修改PDFMiner使用代码
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import TextConverter from pdfminer.layout import LAParams from pdfminer.pdfpage import PDFPage from io import StringIO def extract_text_from_pdf(file_path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' # 明确指定UTF-8编码,避免默认ASCII导致的错误 laparams = LAParams() device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = open(file_path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) # 遍历所有页面提取文本 for page in PDFPage.get_pages(fp, set(), maxpages=0, password="", caching=True, check_extractable=True): interpreter.process_page(page) text = retstr.getvalue() # 清理资源 fp.close() device.close() retstr.close() return text # 调用函数提取文本 pageText = extract_text_from_pdf(filePath) extInfo = pageText stringPresent = string2search.replace(' ','') in extInfo
核心是在TextConverter中指定codec='utf-8',强制用UTF-8处理非ASCII字符,解决UnicodeEncodeError。
小提示:原PyPDF2代码的冗余问题
你原代码里这段循环完全没必要:
for line in pageText: extInfo = extInfo + line
pageText本身就是完整字符串,直接extInfo = pageText即可,逐个字符拼接既低效又容易引入不必要的问题。
内容的提问来源于stack exchange,提问作者Budlog
相关产品推荐
相关产品推荐

