PyPDF2提取含指定语句PDF页面异常:仅保留最后匹配页求助
问题分析与代码修正
你的代码出现问题的核心原因有三个:
- 每次匹配到目标页面时,都重新创建了
PdfFileWriter实例,导致之前收集的页面全部丢失 - 内部的
for n in range(i)循环逻辑错误,它会添加0到i-1的所有页面,而非当前匹配的目标页面 - 每次匹配都写入一次输出文件,后续写入会直接覆盖之前的内容,最终只保留最后一次的写入结果
以下是修正后的代码:
from PyPDF2 import PdfFileReader, PdfFileWriter from pathlib import Path import re pdf = PdfFileReader(main_pdf) target_string = "quick analysis" # 只初始化一次PDF写入器,用于收集所有匹配页面 pdf_writer = PdfFileWriter() for page_num in range(pdf.numPages): page_obj = pdf.getPage(page_num) page_text = page_obj.extractText() # 检查页面是否包含目标字符串,如需忽略大小写可添加re.IGNORECASE参数 if re.search(target_string, page_text, flags=re.IGNORECASE): pdf_writer.addPage(page_obj) # 所有页面遍历完成后,一次性写入结果文件 with Path("Result.pdf").open(mode="wb") as output_file: pdf_writer.write(output_file)
关键修改说明
- 将
PdfFileWriter的初始化移到循环外部,确保所有匹配页面都被累积到同一个实例中 - 移除错误的内部循环,直接添加当前匹配的目标页面
- 将文件写入操作移到循环结束后,避免多次写入覆盖文件,一次性输出所有符合条件的页面
- 优化变量命名,提升代码可读性;可选添加
re.IGNORECASE实现大小写不敏感匹配
内容的提问来源于stack exchange,提问作者Mazen
相关产品推荐
相关产品推荐

