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

如何用PyMuPDF按坐标获取与PDF格式一致的文本块?

PyMuPDF 保留格式提取指定坐标文本的方法

get_textbox默认按单个文本片段拆分输出,导致单词换行。要还原原PDF格式,可通过以下两种PyMuPDF内置方法解决:

方法1:基于文本字典拼接(精准保留行结构)

利用get_text("dict")获取区域内的排版层级数据(块→行→文本片段),再按行拼接文本:

import fitz

doc = fitz.open("目标文件.pdf")
page = doc[0]  # 替换为目标页码
clip_rect = fitz.Rect([40.91999816894531, 274.94500732421875, 349.88214111328125, 364.9531555175781])

# 获取带排版信息的文本字典
text_dict = page.get_text("dict", clip=clip_rect)

# 按行拼接还原格式
formatted_text = ""
for block in text_dict["blocks"]:
    if "lines" in block:
        for line in block["lines"]:
            line_content = "".join([span["text"] for span in line["spans"]])
            formatted_text += line_content + "\n"

print(formatted_text)

方法2:指定提取参数直接保留格式

给get_text传入flags参数,强制保留原始换行和空格布局:

import fitz

doc = fitz.open("目标文件.pdf")
page = doc[0]
clip_rect = fitz.Rect([40.91999816894531, 274.94500732421875, 349.88214111328125, 364.9531555175781])

text = page.get_text("text", clip=clip_rect, flags=fitz.TEXTFLAGS_TEXT)
print(text)
其他库备选方案

pdfplumber

该库对文本布局识别更精准,支持直接按坐标提取并保留格式:

import pdfplumber

with pdfplumber.open("目标文件.pdf") as pdf:
    page = pdf.pages[0]
    # 传入坐标元组提取区域文本
    area_text = page.within_bbox((40.91999816894531, 274.94500732421875, 349.88214111328125, 364.9531555175781)).extract_text()
    print(area_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:48:23