PDF精准区域截图工具

根据报错信息 AttributeError: 'Document' object has no attribute 'load_page',您需要将新版的 load_page()get_pixmap() 方法改为旧版 PyMuPDF (1.18.0) 兼容的驼峰命名法形式(loadPage()getPixmap())。以下是完整修正后的代码:

import fitz  # PyMuPDF


def extract_pdf_region_to_image(pdf_path, output_image_path, page_number, bbox, zoom=3):
    """
    从PDF文件中截取指定区域的页面内容并保存为高清晰度图片,保持原始比例和大小。

    :param pdf_path: PDF文件路径
    :param output_image_path: 输出图片路径(支持PNG/JPEG等格式)
    :param page_number: 要截取的页面编号(从0开始)
    :param bbox: 截取区域的边界框(x0, y0, x1, y1),单位为PDF点(1点=1/72英寸)
    :param zoom: 缩放因子,提高此值可获得更高清晰度的图片(默认为3)
    """
    doc = fitz.open(pdf_path)

    # 检查页面编号是否有效
    if page_number >= len(doc):
        raise ValueError(f"页面编号 {page_number} 超出范围(总页数:{len(doc)})")

    # 修改为旧版API:loadPage() 代替 load_page()
    page = doc.loadPage(page_number)

    # 创建高清晰度的缩放矩阵
    matrix = fitz.Matrix(zoom, zoom)

    # 修改为旧版API:getPixmap() 代替 get_pixmap()
    pix = page.getPixmap(matrix=matrix, clip=bbox)

    # 保存图片(旧版API仍使用save)
    pix.save(output_image_path)

    print(f"截图已保存至:{output_image_path}(尺寸:{pix.width}x{pix.height} 像素,DPI:{72*zoom})")


# 示例用法(根据您的实际路径选择Windows或Linux版本)
# Windows路径示例
# pdf_path = r"C:\Leon\python_project\oceanxecm\2025\05\20250501-Dusty-BCM\pdf\BCM_test_first_page.pdf"
# output_image_path = r"C:\Leon\python_project\oceanxecm\2025\05\20250501-Dusty-BCM\png\BCM_pdf_first_img.png"

# Linux路径示例
pdf_path = r"/home/leon/20250501-Dusty-BCM/pdf/BCM_test_first_page.pdf"
output_image_path = r"/home/leon/20250501-Dusty-BCM/png/BCM_pdf_first_img.png"

page_number = 0  # 第一页(从0开始)

# 定义截取区域的边界框(需要根据实际内容调整)
# 格式:(x0, y0, x1, y1),坐标原点在页面左上角
bbox = (55, 500, 560, 655)  # 示例值,请按需调整

extract_pdf_region_to_image(pdf_path, output_image_path, page_number, bbox, zoom=3)

关键修改点:

  1. load_page() 改为 loadPage()
  2. get_pixmap() 改为 getPixmap()
  3. 保持其他参数和逻辑不变(如 Matrixsave 的用法在旧版中相同)

注意事项:

  • 如果仍有兼容性问题,可以考虑显式安装旧版:
    pip install PyMuPDF==1.16.0
    
  • 边界框 bbox 的坐标需要根据实际PDF内容手动调整,建议先用 page.rect 打印页面完整尺寸作为参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值