使用PyPDF2读取PDF时重复内容及提取失败问题求助
解决PDF文本提取重复及空内容问题
一、先修正代码的基础错误
原代码中arquivo变量未初始化,直接执行arquivo += conteudo_pagina会累积旧值(若之前运行过代码),引发重复内容问题。修正后的代码:
import PyPDF2 # 用原始字符串避免路径转义问题 arquivo_pdf = r'D:\PYTHON\PREFEITURA_SP\ATA40221.pdf' pdf = PyPDF2.PdfReader(arquivo_pdf) total_paginas = len(pdf.pages) arquivo = "" # 初始化空字符串存储内容 for pag in range(total_paginas): pagina = pdf.pages[pag] conteudo_pagina = pagina.extract_text() # 仅添加非空文本,避免累积空字符串 if conteudo_pagina: arquivo += conteudo_pagina print(arquivo)
二、解决3页及之后提取空内容的问题
如果修正后仍无法提取3页后的内容,大概率是PyPDF2对该PDF的格式支持不足,可尝试以下方案:
方案1:换用pdfplumber工具
pdfplumber的文本提取逻辑更健壮,能处理更多复杂PDF布局:
- 先安装依赖:
pip install pdfplumber
- 替换代码:
import pdfplumber arquivo_pdf = r'D:\PYTHON\PREFEITURA_SP\ATA40221.pdf' arquivo = "" with pdfplumber.open(arquivo_pdf) as pdf: for pagina in pdf.pages: conteudo_pagina = pagina.extract_text() if conteudo_pagina: arquivo += conteudo_pagina print(arquivo)
方案2:如果是扫描件(图片型PDF)
若PDF是扫描生成的(本质是图片集合),普通文本提取工具无法识别,需用OCR工具:
- 安装依赖:
pip install pytesseract pdf2image
同时需在本地安装Tesseract OCR引擎(根据操作系统选择对应版本)。
2. OCR提取代码:
from pdf2image import convert_from_path import pytesseract arquivo_pdf = r'D:\PYTHON\PREFEITURA_SP\ATA40221.pdf' arquivo = "" # 将PDF每页转换为图片 pages = convert_from_path(arquivo_pdf) for page in pages: # 识别图片中的文本(lang='por'对应葡萄牙语,可根据PDF语言调整) conteudo_pagina = pytesseract.image_to_string(page, lang='por') arquivo += conteudo_pagina print(arquivo)
内容的提问来源于stack exchange,提问作者Fellipe Zambrano
相关产品推荐
相关产品推荐

