Python通过PyMuPDF高效处理PDF文档的操作方法

Written by

in

文章目录
  • 文本提取 提取精确文本(保留布局信息) 支持按页面、区块、单词或行提取 处理加密文档(需提供密码) 文档渲染 将页面转为图像(PNG/JPEG) 高分辨率输出(支持缩放和旋转) 文档操作 合并/拆分 PDF 旋转、删除、插入页面 添加文本、图像、形状(矩形/圆形等) 高级特性 提取元数据、书签、链接、注释 搜索文本(支持正则表达式) 处理 PDF 表单(读取/填写字段) 安装方法 pip install PyMuPDF
  • 目录
    • 一、PyMuPDF 核心功能
    • 二、关键代码示例
      • 1. 打开文档 & 提取文本
      • 2. 渲染页面为图像
      • 3. 编辑 PDF
      • 4. 合并 PDF
      • 5. 提取图像
      • 6. 搜索文本
    • 三、相关说明
      • 1. 性能优势
      • 2. 适用场景
      • 3. 注意事项

    文本提取

    • 提取精确文本(保留布局信息)
    • 支持按页面、区块、单词或行提取
    • 处理加密文档(需提供密码)

    文档渲染

    • 将页面转为图像(PNG/JPEG)
    • 高分辨率输出(支持缩放和旋转)

    文档操作

    • 合并/拆分 PDF
    • 旋转、删除、插入页面
    • 添加文本、图像、形状(矩形/圆形等)

    高级特性

    • 提取元数据、书签、链接、注释
    • 搜索文本(支持正则表达式)
    • 处理 PDF 表单(读取/填写字段)
    • 安装方法
    pip install PyMuPDF
    

    import fitz  # PyMuPDF 的导入名称
    
    # 打开 PDF
    doc = fitz.open("document.pdf")
    
    # 提取第一页文本
    page = doc.load_page(0)
    text = page.get_text()
    print(text)
    
    # 按区块提取(保留位置信息)
    blocks = page.get_text("blocks")
    for block in blocks:
        print(block[4])  # 文本内容(block格式: (x0, y0, x1, y1, text))
    

    # 渲染为 PNG
    pix = page.get_pixmap(matrix=fitz.Matrix(2, 2))  # 缩放2倍
    pix.save("page0.png")
    
    # 指定 DPI (300 dpi)
    dpi = 300
    mat = fitz.Matrix(dpi / 72, dpi / 72)  # 72是默认DPI
    pix = page.get_pixmap(matrix=mat)
    

    # 添加文本到新页面
    new_page = doc.new_page(width=400, height=200)
    new_page.insert_text((100, 50), "Hello PyMuPDF!", fontsize=24)
    
    # 绘制红色矩形
    rect = fitz.Rect(50, 70, 150, 120)
    new_page.draw_rect(rect, color=(1, 0, 0), width=2)
    
    # 保存修改
    doc.save("modified.pdf")
    

    doc1 = fitz.open("doc1.pdf")
    doc2 = fitz.open("doc2.pdf")
    
    # 将 doc2 插入到 doc1 末尾
    doc1.insert_pdf(doc2)
    doc1.save("merged.pdf")
    

    for img_index, img in enumerate(page.get_images(full=True)):
        xref = img[0]  # 图像引用 ID
        base_image = doc.extract_image(xref)
        image_bytes = base_image["image"]
        with open(f"image_{img_index}.png", "wb") as f:
            f.write(image_bytes)
    

    # 搜索所有 "important" 出现的位置
    areas = page.search_for("important")
    for rect in areas:
        page.add_highlight_annot(rect)  # 添加高亮注释
    

    • 速度极快:比 PyPDF2/pdfplumber 快 5-10 倍
    • 内存效率:流式处理大文件(>1GB)
    • 精确布局:保留文本位置、字体、图像坐标

    • 批量提取 PDF 文本/图像
    • 自动化生成报告(添加水印/页眉页脚)
    • 构建文档搜索引擎
    • 转换 PDF 为图像/文本文件
    • 处理扫描文档(OCR 前预处理)

    1. 安装依赖:无需额外依赖(Windows/macOS/Linux 均有预编译包)
    2. 加密文档:使用 doc.authenticate(password) 处理密码
    3. 坐标系:原点在左上角(与传统 PDF 坐标一致)
    4. 商业许可:AGPL 协议(商业应用需购买许可证)

    以上就是Python通过PyMuPDF高效处理PDF文档的操作方法的详细内容,更多关于Python PyMuPDF处理PDF文档的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • Python使用PyMuPDF(fitz)处理PDF文档的操作指南
    • Python使用PymuPDF处理PDF文件的操作详解
    • Python利用PyMuPDF实现PDF文件处理

    站内搜索