Python使用pdfrw读取PDF流出现乱码如何获取正常编码内容
乱码原因
你直接读取的x.pages[0].Contents.stream是PDF页面的原始二进制内容流,通常会经过FlateDecode等压缩算法压缩,同时存储的是PDF绘制指令而非直接的纯文本内容,所以直接打印会显示为乱码。
解决方案
方法一:使用pdfplumber提取文本(推荐,多语言适配好、准确率高)
- 先安装依赖库:
pip install pdfplumber - 运行以下代码即可提取可读文本:
import pdfplumber file_path = 'C:/Users/Karapuz/Desktop/ser/163687_BMW_X5_M1_0151_Маланюк Евро.pdf' with pdfplumber.open(file_path) as pdf: # 提取第一页文本 first_page_text = pdf.pages[0].extract_text() print(first_page_text)
方法二:基于pdfrw处理(适合需要操作底层PDF流的场景)
如果必须使用pdfrw实现需求,需要先解压内容流,再从绘制指令中筛选文本,示例如下:
- 依赖:Python自带zlib库无需额外安装
from pdfrw import PdfReader from zlib import decompress, MAX_WBITS file_path = 'C:/Users/Karapuz/Desktop/ser/163687_BMW_X5_M1_0151_Маланюк Евро.pdf' pdf = PdfReader(file_path) raw_stream = pdf.pages[0].Contents.stream try: # 解压默认的FlateDecode压缩流 decompressed_stream = decompress(raw_stream, -MAX_WBITS) # 解压后为PDF绘制指令,需额外解析才能拿到纯文本,此处仅打印解压后的原始指令 print(decompressed_stream.decode('utf-8', errors='ignore')) except Exception as e: print("流压缩格式不支持直接解压,建议使用第一种方案")
注:如果PDF包含俄文等非ASCII字符,第一种方案会自动处理编码适配,无需额外调整。
内容的提问来源于stack exchange,提问作者karapuz
相关产品推荐
相关产品推荐

