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

PyMuPDF提取指定Rect区域文本失败,Rect.is_empty返回True的原因

问题:PyMuPDF获取PDF指定区域文本失败,Rect显示为空

我尝试了Stack Overflow上《读取PDF特定区域》帖子里的解决方案,但用户Zach Young提供的示例代码没法正常运行。设置合理的Rect参数后,执行print(rect.is_empty)输出True,画不出矩形,page.get_textbox(rect)没有输出,不过page.get_text()能正常获取全文本,想问问这是什么原因。

相关代码如下:

import os.path

import fitz
from fitz import Document, Page, Rect


# 可视化PyMuPDF的Rect和你在PDF里看到的区域对比
VISUALIZE = True

input_path = "test.pdf"
doc: Document = fitz.open(input_path)

for i in range(len(doc)):
    page: Page = doc[i]
    page.clean_contents()  # 参考PyMuPDF文档:解决PDF页面元素错位问题

    # 硬编码你需要的区域
    rect = Rect(0, 0, 100, 100)

    if VISUALIZE:
        # 画红色方框可视化Rect区域
        page.draw_rect(rect, width=1.5, color=(1, 0, 0))

    text = page.get_textbox(rect)

    print(text)


if VISUALIZE:
    head, tail = os.path.split(input_path)
    viz_name = os.path.join(head, "viz_" + tail)
    doc.save(viz_name)

可能的原因及排查方向

  • Rect参数顺序错误:PyMuPDF的Rect构造要求x0 < x1且y0 < y1,如果把坐标写反(比如Rect(100,100,0,0)),Rect会被判定为空。检查你设置的四个坐标值是否满足这个规则。
  • 页面坐标系搞反:PyMuPDF的坐标系原点在页面左下角,但多数PDF阅读器显示的原点在左上角。如果你是按阅读器的左上角坐标设置Rect,实际可能落在页面外,导致Rect无效或没有文本。可以先打印page.rect查看页面实际尺寸,确认坐标范围。
  • clean_contents影响:虽然page.clean_contents()是用来修复页面内容的,但部分PDF执行后可能导致文本坐标异常。可以尝试注释掉这一行再测试。
  • Rect范围太精准:如果Rect的边界刚好卡着文本块边缘,可能无法捕获到文本。可以适当扩大Rect范围,比如把坐标调整为(x0-2, y0-2, x1+2, y1+2)再试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22