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

如何用Python检查PDF页面是否包含图片?完善现有代码逻辑

检查PDF页面是否包含图片的简洁方法

嘿,我来帮你搞定这个问题!你用的pdfreader应该是PyPDF2库的PdfReader类吧?它本身确实没有直接判断页面是否含图片的方法,但我们可以通过解析PDF页面的底层资源来实现——思路很简单:PDF里的图片一般存在页面的Resources字典的XObject中,只要检查这些XObject里有没有类型为/Image的对象就行。

第一步:实现检查图片的函数

先写一个轻量的函数,用来判断单页是否包含图片:

def has_image(page):
    # 获取页面的资源字典
    resources = page.get('/Resources')
    if not resources:
        return False
    # 获取资源里的XObject(PDF的图像、表单等元素都存在这里)
    xobjects = resources.get('/XObject')
    if not xobjects:
        return False
    # 遍历所有XObject,检查是否有图片类型的对象
    for obj in xobjects.values():
        if obj.get('/Subtype') == '/Image':
            return True
    return False

第二步:整合到你的代码里

注意哦,PyPDF2的页码是从0开始的,你原来的currentPage = 1会跳过第一页,得调整一下。另外如果要提取图片上的文字,还需要把PDF页面转成图片再用Tesseract识别,这里可以用pdf2image库来完成页面转图片的工作:

from PyPDF2 import PdfReader
import pytesseract
from pdf2image import convert_from_path

def has_image(page):
    resources = page.get('/Resources')
    if not resources:
        return False
    xobjects = resources.get('/XObject')
    if not xobjects:
        return False
    for obj in xobjects.values():
        if obj.get('/Subtype') == '/Image':
            return True
    return False

pdfreader = PdfReader("your_file.pdf")  # 替换成你的PDF文件路径
currentPage = 0
totalPages = len(pdfreader.pages)
text = ''

while currentPage < totalPages:
    page = pdfreader.pages[currentPage]
    # 先提取页面上的普通文本
    text += page.extract_text() or ""
    
    # 如果页面包含图片,就用Tesseract做OCR提取图片里的文字
    if has_image(page):
        # 把当前页转成PIL Image对象
        images = convert_from_path("your_file.pdf", first_page=currentPage+1, last_page=currentPage+1)
        for img in images:
            text += pytesseract.image_to_string(img)
    
    currentPage += 1

print(text)

一些需要注意的细节

  • 先安装依赖库:pip install PyPDF2 pytesseract pdf2image pillow
  • 要确保你的系统里安装了Tesseract OCR引擎,不然pytesseract无法正常工作
  • 如果PDF里是矢量图,这个方法也能检测到,但OCR可能需要额外处理(不过大部分场景都是位图,没问题)

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

火山引擎 最新活动