一. pdfminer.six 中的 bbox 定义

|
|-------+====={+}
|       |      |
|------{+}=====+
|
+----------------->

以页面的左下角为原点,区域的(左下,右上)两个点的座标
所以 bbox 返回的四个座标 [x, y, xx, yy] 对应如下

  • x : 区域左下角距离页面左下角的水平距离
  • y : 区域左下角距离页面左下角的垂直距离
  • xx :区域右上角距离页面左下角的水平距离
  • yy :区域右上角距离页面左下角的垂直距离

二. 取某个区域的文本内容的代码:

import os
from pdfminer.high_level import extract_pages
from pdfminer.layout import LTTextBox, LTTextLine

def extract_text_with_coords(pdf_path):
    p = 0
    for page_layout in extract_pages(pdf_path):
        if p == 1:
            company = extract_company(page_layout)
            phone = extract_phone(page_layout)
            address =  extract_address(page_layout)
            print(company)
            print(phone)
            print(address)
        p += 1

def extract_inbox(page_layout, x, y, xx, yy):
    text = ""
    for element in page_layout:
        if isinstance(element, LTTextBox) or isinstance(element, LTTextLine):
            if is_elemnt_inbox(x, y, xx, yy, element):
                text += element.get_text().strip()
    return text

def extract_company(page_layout) -> str:
    return extract_inbox(page_layout, 350, 640, 500, 660)

def is_elemnt_inbox(x, y, xx, yy, element) -> bool:  
    x0, y0, x1, y1 = element.bbox
    if x0 >= x and y0 >= y and x1 <= xx and y1 <= yy:
        return True
    else:
        return False

Airy
2.4k 声望69 粉丝

github.com/airylinus