如何用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
相关产品推荐
相关产品推荐

