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

Python中从PDF指定坐标提取文本?pdfminer.six局限解惑

指定PDF坐标区域提取文本的解决方案

关于pdfminer.six的误解澄清

其实pdfminer.six支持按坐标筛选文本,只是默认流程是遍历全页元素,你可以在解析过程中加入坐标判断,只保留目标区域内的文本块,无需全量解析后再过滤,能有效提升效率。

用pdfminer.six实现坐标提取的思路

  1. 明确目标区域的坐标范围(注意PDF坐标原点通常在左下角,需和你预设的顶部区域坐标做转换)
  2. 自定义文本块处理逻辑,遍历页面元素时,检查每个文本块的bbox(边界框)是否与目标区域相交/包含
  3. 仅提取符合条件的文本内容,跳过其他区域元素

示例代码:

from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextBoxHorizontal

def extract_text_from_region(pdf_path, page_num, x0, y0, x1, y1):
    text = ""
    for page_layout in extract_pages(pdf_path, page_numbers=[page_num]):
        for element in page_layout:
            if isinstance(element, LTTextBoxHorizontal):
                # 根据需求调整区域判断逻辑
                if element.bbox[0] >= x0 and element.bbox[1] >= y0 and element.bbox[2] <= x1 and element.bbox[3] <= y1:
                    text += element.get_text()
    return text.strip()

更高效的替代库

  • PyMuPDF(fitz):性能远高于pdfminer.six,API简洁,直接支持按矩形区域提取文本:
import fitz

def extract_text_with_pymupdf(pdf_path, page_num, rect):
    doc = fitz.open(pdf_path)
    page = doc[page_num]
    # rect参数格式为(x0, y0, x1, y1),坐标原点在左下角
    text = page.get_text("text", clip=rect)
    doc.close()
    return text.strip()
  • pdfplumber:基于pdfminer.six封装,API更友好,支持按矩形区域提取文本,同时保留布局信息:
import pdfplumber

def extract_text_with_pdfplumber(pdf_path, page_num, x0, y0, x1, y1):
    with pdfplumber.open(pdf_path) as pdf:
        page = pdf.pages[page_num]
        text = page.within_bbox((x0, y0, x1, y1)).extract_text()
    return text.strip()

注意事项

  • 不同PDF的坐标体系可能有差异,确认原点位置(多数为左下角)和单位(通常是点,1点=1/72英寸)
  • 若为扫描版PDF(图片格式),上述库无法直接提取文本,需先结合pytesseract做OCR处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:25:17