You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyPDF2提取部分PDF文本为空,请求排查问题原因

嘿,这个问题我之前也踩过坑,来帮你分析下可能的原因和对应的解决办法:

可能的原因及解决方案
  • PDF本身无可用的文本层
    这种情况特别常见:如果你的目标PDF是扫描生成的图像版PDF,或者文本被嵌入到矢量图形、特殊隐藏图层里,PyPDF2根本找不到可提取的文本内容,自然只能返回一堆换行符。你可以先手动验证下:打开PDF后用鼠标尝试选中文字,如果完全选不到,基本就是这个问题了。
    解决办法:用OCR工具识别图像中的文本,比如结合pytesseractPyMuPDF来实现:

    import fitz  # PyMuPDF,用来将PDF页面转成图片
    from PIL import Image
    import pytesseract
    
    # 打开PDF并提取第一页转成图片
    doc = fitz.open('abc.pdf')
    page = doc[0]
    pix = page.get_pixmap()
    img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
    
    # 用OCR识别文本(中文PDF记得指定语言参数)
    text = pytesseract.image_to_string(img, lang='chi_sim')
    print(text)
    
  • PyPDF2对复杂PDF的支持局限
    PyPDF2的文本提取能力不算顶尖,遇到用了特殊字体、非标准文本编码,或者文本布局非常复杂(比如分栏排版、文本块乱序存储)的PDF,就容易提取失败,只返回空内容或换行。
    解决办法:换用更强大的PDF处理库,比如PyMuPDF(fitz)或者pdfplumber,这两个库对复杂PDF的文本提取成功率高很多:
    示例1:用PyMuPDF提取

    import fitz
    
    doc = fitz.open('abc.pdf')
    page_text = doc[0].get_text()
    print(page_text)
    

    示例2:用pdfplumber提取

    import pdfplumber
    
    with pdfplumber.open('abc.pdf') as pdf:
        first_page = pdf.pages[0]
        print(first_page.extract_text())
    
  • PDF被设置了提取权限限制
    少数情况下,PDF可能被加密并限制了文本提取权限,虽然能正常打开,但禁止提取文本。如果知道密码的话,可以尝试先解密再提取:

    import PyPDF2
    
    pdfFileObj = open('abc.pdf', 'rb')
    pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
    if pdfReader.isEncrypted:
        pdfReader.decrypt('your_password')  # 替换为PDF的密码
    pageObj = pdfReader.getPage(0)
    print(pageObj.extractText())
    

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

火山引擎 最新活动