PDFPlumber解析PDF文本报错:AssertionError: (‘Unhandled’, 6)

文章目录

1、问题描述

今天在使用PDFPlumber模块提取PDF文本时extract_text()方法报错,报错内容如下:

python 复制代码
Traceback (most recent call last):
  ......
  File "F:\Python\...\site-packages\pdfminer\pdffont.py", line 1091, in __init__
    self.unicode_map = ttf.create_unicode_map()
  File "F:\Python\...\site-packages\pdfminer\pdffont.py", line 826, in create_unicode_map
    assert False, str(("Unhandled", fmttype))
AssertionError: ('Unhandled', 6)

报错代码如下:

python 复制代码
import pdfplumber

with pdfplumber.open(rf'F:\...\file.pdf') as pdf:
    for page in pdf.pages:
        print(page.extract_text())

2、问题原因

经查找原因,最终确定可能是PDF文件本身的原因,具体可见这篇文章:https://github.com/jsvine/pdfplumber/discussions/994?sort=new

ChatGPT则认这种错误是因为库内部遇到了某种它无法处理的情况,ChatGPT给出的解决方案如下:

1) 更新PDFPlumber

python 复制代码
pip install --upgrade pdfplumber

2) 检查PDF文件

确认PDF文件没有损坏,并且是文本格式的PDF而不是扫描的图像

3) 使用其他方法

可以尝试使用extract_words()extract_tables()等其他方法,这取决于你需要提取的内容类型

4) 捕获异常

添加异常处理,这样即使遇到错误也不会导致程序崩溃

python 复制代码
try:
    text = page.extract_text()
except AssertionError as e:
    print(e)
    text = None

5) 尝试其他库

可以考虑使用其他PDF处理库,如PyPDF2或PyMuPDF等

在尝试了ChatGPT的一些建议后,确定可能是PDF本身的原因,因此考虑使用其他库

3、问题解决

经过尝试,最终发现PyMuPDF库可以解析使用:

python 复制代码
import fitz

with fitz.open(rf'F:\...\file.pdf') as doc:
    for page in doc.pages():
        print(page.get_text())

看来是PDF本身的原因,我们的PDF可能已经损坏

相关推荐
_.Switch几秒前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
测开小菜鸟1 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
萧鼎2 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸2 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农2 小时前
Python 继承、多态、封装、抽象
开发语言·python
Python大数据分析@3 小时前
python操作CSV和excel,如何来做?
开发语言·python·excel
黑叶白树3 小时前
简单的签到程序 python笔记
笔记·python
Shy9604183 小时前
Bert完形填空
python·深度学习·bert
上海_彭彭3 小时前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
zhongcx014 小时前
使用Python查找大文件的实用脚本
python