今天在使用PDFPlumber
模块提取PDF文本时extract_text()
方法报错,报错内容如下:
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)
报错代码如下:
import pdfplumber
with pdfplumber.open(rf'F:\...\file.pdf') as pdf:
for page in pdf.pages:
print(page.extract_text())
经查找原因,最终确定可能是PDF文件本身的原因,具体可见这篇文章:https://github.com/jsvine/pdfplumber/discussions/994?sort=new
ChatGPT则认这种错误是因为库内部遇到了某种它无法处理的情况,ChatGPT给出的解决方案如下:
1) 更新PDFPlumber
库
pip install --upgrade pdfplumber
2) 检查PDF文件
确认PDF文件没有损坏,并且是文本格式的PDF而不是扫描的图像
3) 使用其他方法
可以尝试使用extract_words()
或extract_tables()
等其他方法,这取决于你需要提取的内容类型
4) 捕获异常
添加异常处理,这样即使遇到错误也不会导致程序崩溃
try:
text = page.extract_text()
except AssertionError as e:
print(e)
text = None
5) 尝试其他库
可以考虑使用其他PDF处理库,如PyPDF2或PyMuPDF等
在尝试了ChatGPT的一些建议后,确定可能是PDF本身的原因,因此考虑使用其他库
经过尝试,最终发现PyMuPDF库可以解析使用:
import fitz
with fitz.open(rf'F:\...\file.pdf') as doc:
for page in doc.pages():
print(page.get_text())
看来是PDF本身的原因,我们的PDF可能已经损坏