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

PDF裁剪后读取文本仍为原内容,如何正确裁剪并读取?

解决PDF裁剪后读取仍获原内容的问题

你之前用Fitz或PyPDF2做的裁剪,本质只是修改了PDF的CropBox或MediaBox参数——这只是告诉PDF阅读器「只显示这个区域」,但底层的文本数据并没有被删除,所以用pdfplumber或PyPDF2读取时,还是会拿到完整内容。

下面提供两种可行的解决思路:

方案1:真正移除裁剪区域的内容(生成新PDF)

用PyMuPDF(即你使用的Fitz)可以直接提取指定区域的内容并生成新PDF,新PDF里仅保留你需要的区域内容,读取时不会拿到页脚的「page ... of ...」。

代码示例:

import fitz  # PyMuPDF

# 打开原PDF
doc = fitz.open("original.pdf")
# 创建新PDF容器
new_doc = fitz.open()

# 定义裁剪区域(单位为点,1英寸=72点)
# 示例:移除底部20点高度的页脚区域
crop_rect = fitz.Rect(0, 0, doc[0].rect.width, doc[0].rect.height - 20)

for page in doc:
    # 创建和裁剪区域尺寸一致的新页面
    new_page = new_doc.new_page(width=crop_rect.width, height=crop_rect.height)
    # 将原页面指定区域的内容绘制到新页面
    new_page.show_pdf_page(new_page.rect, doc, page.number, clip=crop_rect)

# 保存处理后的PDF
new_doc.save("cropped_actual.pdf")
new_doc.close()
doc.close()

生成的cropped_actual.pdf中,页脚内容已被真正移除,用任何文本读取工具都不会获取到多余内容。

方案2:读取时直接提取指定区域的文本(无需修改PDF)

如果不想生成新PDF,更高效的方式是用pdfplumber直接读取页面的指定区域,跳过不需要的页脚部分:

代码示例:

import pdfplumber

with pdfplumber.open("original.pdf") as pdf:
    for page in pdf.pages:
        # 定义要提取的有效区域(左、上、右、下,单位为点)
        # 示例:跳过底部20点的页脚区域
        crop_area = (0, 0, page.width, page.height - 20)
        # 提取该区域内的文本
        target_text = page.within_bbox(crop_area).extract_text()
        print(target_text)

这种方式直接在读取阶段过滤掉不需要的区域,无需修改原PDF,适合批量处理场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:52:10