"""任务:处理二进制文件(PDF、DOCX等)场景:提取PDF中的文本测试需要真实的PDF文件"""# 需要安装: pip install PyPDF2try:import PyPDF2def extract_text_from_pdf(filepath):"""从PDF提取文本返回: {"text": "全部文本","pages": [{"page": 1, "text": "第一页"},{"page": 2, "text": "第二页"}],"metadata": {"author": "...", "title": "..."}}"""result = {'text': '','pages': [],'metadata': {}}with open(filepath, 'rb') as f: # 以二进制模式打开 PDFreader = PyPDF2.PdfReader(f)if reader.metadata:result['metadata'] = {'author': reader.metadata.get('/Author', ''),'title': reader.metadata.get('/Title', '')}for i, page in enumerate(reader.pages):text = page.extract_text()result['pages'].append({'page': i + 1,'text': text})result['text'] += text + '\n'return resultprint("PDF处理功能可用")except ImportError:print(" PyPDF2未安装,跳过PDF测试")def extract_text_from_pdf(filepath: str) -> dict:return {"text": "PyPDF2未安装", "pages": [], "metadata": {}}
一、场景
从 PDF 文件里提取每页文本、PDF 元数据(标题、作者),以及进行全部文本合并等。
二、个人理解/最初卡在哪里
reader = PyPDF2.PdfReader(f) 是 PyPDF2 特有的,把文件变成PDF 阅读器对象,还有reader.metadata、reader.pages、page.extract_text()等方法和属性。
PDF 标准元数据(固定英文键,值可中文)有:
/Title,文档标题,儿童偏头痛诊断和治疗进展
/Author,作者,张三 李四
/Subject,主题 / 副标题,神经内科、临床研究
/Keywords,关键词,偏头痛、儿童、诊疗
/Creator,原始文档创建工具,WPS 文字、Word 2019
/Producer,PDF生成工具,WPS PDF 转换器、Adobe Acrobat
/CreationDate,创建时间,D:20240101120000+08'00'
/ModDate,修改时间,同上格式。
键永远是英文,中文 PDF 不会变成 “作者 / 标题”;值可以是中文,用 .get("/Author", "") 直接拿即可。
PyPDF2 常用方法
1. 核心类
from PyPDF2 import PdfReader, PdfWriter, PdfMerger2. 读取与文本提取
# 打开PDF(二进制只读)withopen("xxx.pdf", "rb") as f:reader=PdfReader(f)# 1. 总页数print(len(reader.pages))# 2. 元数据(标准键,值可中文)meta=reader.metadataauthor=meta.get("/Author", "")title=meta.get("/Title", "")# 3. 逐页文本提取(中文可用,排版一般)for i, page inenumerate(reader.pages):text=page.extract_text() # 核心方法
3. 页面操作
# 提取单页page0=reader.pages[0]# 旋转页面(90/180/270)page0.rotate(90)# 合并PDFmerger=PdfMerger()merger.append("a.pdf")merger.append("b.pdf")merger.write("merged.pdf")# 拆分PDFwriter=PdfWriter()writer.add_page(reader.pages[0])with open("page1.pdf", "wb") as f:writer.write(f)
4. 加密 / 解密
# 加密writer.encrypt("password")# 解密(有密码时)if reader.is_encrypted:reader.decrypt("password")
5. 优缺点(中文场景)
优点:轻量、无依赖、安装快(pip install PyPDF2)、纯 Python、中文文本能提取、元数据读取稳定。
缺点:排版差、表格 / 公式全丢、双栏乱序、无 OCR(扫描版空白)。
三、代码中的关键洞察
PyPDF2 是专门解析 PDF 的库,每页独立提取文本返回结构化数据(分页 + 全文 + 元数据),如果只用元数据 + 纯文本提取(无表格 / 公式),PyPDF2 足够,轻量稳定。中文论文、双栏、有表格 / 公式、扫描版,可以用 MinerU或其他工具,效果更好。
四、关键代码/可复用片段
import PyPDF2def extract_text_from_pdf(filepath):result = {"text": "", "pages": [], "metadata": {}}withopen(filepath, 'rb') as f:reader = PyPDF2.PdfReader(f)# 元数据if reader.metadata:result["metadata"] = {"author": reader.metadata.get("/Author", ""),"title": reader.metadata.get("/Title", "")}# 分页读取for i, page inenumerate(reader.pages):text = page.extract_text()result["pages"].append({"page": i+1, "text": text})result["text"] += text + "\n"return result
夜雨聆风