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

如何使用Python按边界框正确裁剪PDF?

如何使用Python按边界框正确裁剪PDF?

我之前折腾PDF裁剪的时候也踩过这个坑——只靠提取文本块来确定裁剪范围,很容易漏掉图片、矢量图形这些可见内容,导致裁剪出来的PDF要么没裁到位,要么把重要元素给切没了。

给你完善一下代码,能准确识别页面上所有可见元素的边界,然后精准裁剪:

import fitz  # PyMuPDF

def crop_pdf_to_visible_content(input_pdf, output_pdf):
    # 打开输入PDF文档
    doc = fitz.open(input_pdf)
    
    for page in doc:
        # 获取页面上所有类型的元素块:文本、图像、图形
        all_blocks = page.get_text("dict")["blocks"]
        if not all_blocks:
            # 如果页面没有任何可见元素,保留原页面尺寸
            continue
        
        # 收集所有元素的边界框(bbox格式:(x0, y0, x1, y1),x从左到右,y从下到上)
        all_bboxes = []
        for block in all_blocks:
            # 不管是文本、图像还是图形块,都包含bbox属性
            if "bbox" in block:
                all_bboxes.append(block["bbox"])
        
        # 计算所有边界框的最小包围盒:找到最左、最下、最右、最上的坐标
        x0s = [bbox[0] for bbox in all_bboxes]
        y0s = [bbox[1] for bbox in all_bboxes]
        x1s = [bbox[2] for bbox in all_bboxes]
        y1s = [bbox[3] for bbox in all_bboxes]
        
        # 最终的裁剪边界
        crop_x0 = min(x0s)
        crop_y0 = min(y0s)
        crop_x1 = max(x1s)
        crop_y1 = max(y1s)
        
        # 给裁剪边界留一点余量(可选,避免元素贴边被裁掉,数值可以自己调)
        margin = 2  # 单位是PDF的点(1点≈0.35mm)
        crop_x0 = max(crop_x0 - margin, 0)
        crop_y0 = max(crop_y0 - margin, 0)
        crop_x1 = min(crop_x1 + margin, page.rect.width)
        crop_y1 = min(crop_y1 + margin, page.rect.height)
        
        # 设置页面的裁剪框
        page.set_cropbox(fitz.Rect(crop_x0, crop_y0, crop_x1, crop_y1))
    
    # 保存裁剪后的PDF
    doc.save(output_pdf)
    doc.close()

# 调用示例
# crop_pdf_to_visible_content("input.pdf", "output_cropped.pdf")

这里还有几个实用的小细节要提醒你:

  • 为啥要取所有块?因为page.get_text("dict")返回的blocks包含了文本(type=0)、图像(type=1)、图形(type=2)三种可见元素,只拿文本的话肯定会漏内容。
  • 加余量是个小技巧:很多PDF的元素会紧贴着实际内容边缘,直接裁剪容易把文字的笔画或者图片的边缘切掉,加个2点的余量刚好能避免这个问题,你可以根据自己的需求调整数值。
  • 处理空页面:如果某个页面完全没有可见元素,代码会跳过裁剪,保留原页面的大小,避免出现空白的极小页面。

你可以把自己的输入输出路径填进去试试,这个方法比只靠文本块精准多了~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:34:38