You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyPDF2与PyPDF4提取PDF文本返回空白如何解决?

问题根本原因

PyPDF2/PyPDF4仅支持提取标准编码、非扫描版PDF的可编辑文本内容,返回空白通常是以下几种情况:

  • PDF本身是扫描件生成的影像版PDF,所有内容都是嵌入的图片,不存在可直接读取的文本层
  • PDF使用了自定义字体编码,没有内置字符映射关系,库无法解码识别内容
  • PDF设置了内容提取权限限制,虽然可以读取页数等元数据,但无法直接提取文本

解决方案

1. 先排查PDF是否加密或有权限限制

先在代码中增加解密逻辑,部分PDF的权限限制可以直接通过内置方法解除:

import PyPDF4 as p2 
pdffile = open("XXXX.pdf","rb")
pdfread=p2.PdfFileReader(pdffile)
# 新增解密逻辑
if pdfread.isEncrypted:
    # 无密码的加密PDF直接传空字符串解密
    pdfread.decrypt('')
print(pdfread.getNumPages())
pageinfo=pdfread.getPage(0)
print(pageinfo.extractText())

如果运行后还是返回空白,排除权限限制问题,继续往下排查。

2. 替换为兼容性更强的文本提取库

优先使用pdfplumber,它对非标准编码PDF的兼容性远高于PyPDF系列,安装和使用代码如下:
安装命令:
pip install pdfplumber
提取代码:

import pdfplumber

with pdfplumber.open("XXXX.pdf") as pdf:
    # 输出总页数
    print(len(pdf.pages))
    # 提取第一页文本
    first_page = pdf.pages[0]
    print(first_page.extract_text())

如果该方法仍然返回空白,说明你的PDF是扫描版影像PDF,需要用OCR方案提取。

3. 扫描版PDF使用OCR提取文本

可以用pytesseract+pdf2image的组合方案,把PDF每页转成图片后识别文本内容:
依赖安装(注意需要提前安装tesseract OCR引擎到本地):
pip install pytesseract pdf2image
提取代码示例:

from pdf2image import convert_from_path
import pytesseract

# 把PDF第一页转成PIL图片对象
pages = convert_from_path("XXXX.pdf", first_page=1, last_page=1)
# 识别图片中的中文+英文文本,只识别英文可以去掉lang参数
text = pytesseract.image_to_string(pages[0], lang='chi_sim+eng')
print(text)

内容的提问来源于stack exchange,提问作者War_Pig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:48:04