You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中基于Pytesseract OCR仅处理PDF前5页

仅处理PDF前5页的OCR代码修改

要实现只处理每个PDF的前5页,核心是在PDF转图片阶段就限制只转换前5页,避免不必要的资源消耗,同时确保后续OCR只处理这些页面。以下是修改后的代码及关键说明:

修改后的完整代码

import os
import time
from pdf2image import convert_from_path
import pytesseract

# 配置Tesseract路径
pytesseract.pytesseract.tesseract_cmd = "Path to pytesseract"
# PDF文件所在目录
path = r"Path to PDF"
os.chdir(path)

# 假设FoundFiles是你获取到的PDF文件名列表
for counterDocuments in range(len(FoundFiles)):
    filePath = os.path.join(path, FoundFiles[counterDocuments])
    ResultPageNumber = []
    st = time.time()
    
    # 仅转换PDF的前5页(如果PDF页数不足5页,则转换所有现有页面)
    doc = convert_from_path(filePath, first_page=1, last_page=5)
    
    # 遍历转换后的页面(最多5页)
    for page_number, page_data in enumerate(doc):
        txt = pytesseract.image_to_string(page_data, lang='eng')
        # 后续的关键词搜索、CSV导出逻辑保留在此处
        # ...

    et = time.time()
    print(f"处理文件 {FoundFiles[counterDocuments]} 耗时: {et - st:.2f} 秒")

关键修改点

  • PDF转图片时限制页数:调用convert_from_path时添加first_page=1, last_page=5参数,直接只生成前5页的图片。如果目标PDF的页数少于5页,该方法会自动转换所有现有页面,无需额外判断。
  • 优化文件路径拼接:用os.path.join()替代手动拼接路径,避免因系统分隔符不同导致的错误。
  • 修正循环逻辑:原代码中for n in FoundFiles却使用counterDocuments索引,改为for counterDocuments in range(len(FoundFiles))更符合逻辑,你也可以直接遍历文件名:for filename in FoundFiles: filePath = os.path.join(path, filename)。

如果坚持要在OCR循环阶段做判断(不推荐,因为还是会转换所有页面),也可以在循环中添加条件:

for page_number, page_data in enumerate(doc):
    # page_number从0开始,判断小于5即可只处理前5页
    if page_number < 5:
        txt = pytesseract.image_to_string(page_data, lang='eng')
        # 后续逻辑...
    else:
        break

但这种方式会先把整个PDF转成图片,再跳过后续页面,浪费资源,优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:45:29