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





    1、问题描述


    今天在使用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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    报错代码如下:

    import pdfplumber
    
    with pdfplumber.open(rf'F:\...\file.pdf') as pdf:
        for page in pdf.pages:
            print(page.extract_text())
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、问题原因


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

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

    1) 更新PDFPlumber

    pip install --upgrade pdfplumber
    
    • 1

    2) 检查PDF文件

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

    3) 使用其他方法

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

    4) 捕获异常

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

    try:
        text = page.extract_text()
    except AssertionError as e:
        print(e)
        text = None
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5) 尝试其他库

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

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

    3、问题解决


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

    import fitz
    
    with fitz.open(rf'F:\...\file.pdf') as doc:
        for page in doc.pages():
            print(page.get_text())
    
    • 1
    • 2
    • 3
    • 4
    • 5

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



  • 相关阅读:
    【Github开源项目体验】- ZFile 基于 Java 的在线网盘
    gabse8a 认证培训课后题(二)
    JVM调优(一)之性能优化步骤
    修改iframe内部元素的样式
    逻辑分析仪使用
    数字电平(二):电平转换
    C#编程学习与实践
    Eureka 高可用
    再出发感怀
    深度学习基础--神经网络(1)激活函数
  • 原文地址:https://blog.csdn.net/weixin_55629186/article/details/136565754