寻求可提取PDF文本及左上角坐标的Python模块(返回bounding boxes列表)
可提取PDF文本及左上角坐标的Python模块推荐
有两个常用的Python模块能满足你的需求,支持完整解析PDF文件,并返回包含文本、左上角坐标的边界框列表:
PyMuPDF(fitz)
这是一款高效的PDF处理工具,默认返回的文本边界框信息可直接转换为你需要的格式。需要注意的是,它的坐标原点在页面左下角,需通过页面高度减去边界框的bottom值,转换为左上角坐标。
示例代码:
import fitz def extract_text_with_coords(pdf_path): text_boxes = [] doc = fitz.open(pdf_path) for page in doc: page_height = page.rect.height blocks = page.get_text("dict")["blocks"] for block in blocks: if block["type"] == 0: # 仅处理文本块 for line in block["lines"]: for span in line["spans"]: # 转换为左上角坐标:top = 页面高度 - 边界框bottom值 left = span["bbox"][0] top = page_height - span["bbox"][3] text_boxes.append({ "left": round(left, 2), "top": round(top, 2), "text": span["text"] }) doc.close() return text_boxes # 使用示例 result = extract_text_with_coords("your_file.pdf") print(result)
pdfplumber
这个模块专为PDF文本提取设计,坐标原点默认在页面左上角,无需额外转换就能直接获取你需要的left、top值,使用起来更直观。
示例代码:
import pdfplumber def extract_text_with_coords(pdf_path): text_boxes = [] with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: words = page.extract_words(x_tolerance=1, y_tolerance=1) for word in words: text_boxes.append({ "left": round(word["x0"], 2), "top": round(word["top"], 2), "text": word["text"] }) return text_boxes # 使用示例 result = extract_text_with_coords("your_file.pdf") print(result)
两个模块都支持全PDF解析,无需指定特定区域。pdfplumber的坐标逻辑更贴合你的需求,PyMuPDF则在处理大文件时速度更有优势。
内容的提问来源于stack exchange,提问作者DoctorEvil
相关产品推荐
相关产品推荐

