如何在Python中解析PDF的IndirectObject并提取数据?
解决PyPDF2中IndirectObject问题并提取PDF数据
1. 理解IndirectObject的本质
你看到的IndirectObject不是错误,是PyPDF2对PDF页面对象的内部引用方式。getPage(0)返回的是Page对象,直接打印它只会显示内部引用标识,而不是页面内容。要提取数据,需要调用Page对象的文本提取方法。
2. 提取文本的正确代码
修改你的代码,使用extract_text()方法获取页面内容:
import PyPDF2 path = 'cutoffs.pdf' reader = PyPDF2.PdfReader(path) # PyPDF2 v2.x版本推荐用PdfReader,PdfFileReader已被弃用 page_1 = reader.pages[0] # v2.x版本用pages索引获取页面,替代getPage() text = page_1.extract_text() print(text)
3. 处理无法提取文本的情况
如果运行后没有得到有效文本,大概率是因为这个PDF是扫描生成的图片型PDF,PyPDF2无法提取图片里的文字,需要用OCR工具处理:
- 先安装依赖:
pip install pytesseract pillow pdf2image - 然后用以下代码(需提前安装Tesseract OCR引擎):
import pytesseract from pdf2image import convert_from_path # 将PDF页面转为图片 pages = convert_from_path('cutoffs.pdf', 500) for i, page in enumerate(pages): # 用Tesseract提取图片中的文字 text = pytesseract.image_to_string(page, lang='eng') print(f"第{i+1}页内容:") print(text)
4. 版本兼容提示
PyPDF2在v2.x版本做了API变更,PdfFileReader和getPage()已经被标记为弃用,建议使用PdfReader和pages属性来获取页面,避免后续版本出现兼容问题。
内容的提问来源于stack exchange,提问作者shantanu
相关产品推荐
相关产品推荐

