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

