Python使用PyMuPDF操作PDF的代码示例

 更新时间:2025年02月28日 09:59:40   作者:morris131  
PyMuPDF,也被称为fitz(这是其导入时的常用别名),是一个功能强大的Python库,用于处理PDF和其他文档格式,与 PyPDF2相比,PyMuPDF提供了更多的功能和更好的性能,特别是在处理复杂的PDF文件时,本文给大家介绍了Python使用PyMuPDF操作PDF,需要的朋友可以参考下

安装PyMuPDF

首先,你需要安装PyMuPDF库。你可以使用pip来安装它:

pip install pymupdf

读取PDF文件

读取PDF文件并打印其页数:

import fitz

# 使用pymupdf读取pdf文件
if __name__ == '__main__':
    # 打开 PDF 文件
    doc = fitz.open('example.pdf')

    print(doc.page_count)

提取文本

从PDF文件中提取文本:

import fitz

# 使用Pymupdf读取pdf文本
if __name__ == '__main__':
    # 打开 PDF 文件
    doc = fitz.open('example1.pdf')

    print(doc.load_page(0).get_text())

拆分PDF文件

将PDF文件拆分为两个文件,一个文件包含奇数页,一个文件包含偶数页:

import fitz

# 使用pymupdf将PDF文件拆分为两个文件,一个文件包含奇数页,一个文件包含偶数页:
if __name__ == '__main__':
    # 创建一个 PDF 写入器对象
    odd_writer = fitz.open()
    even_writer = fitz.open()

    doc = fitz.open('example.pdf')

    for page_num in range(doc.page_count):
        if page_num % 2 == 0:
            odd_writer.insert_pdf(doc, from_page=page_num, to_page=page_num)
        else:
            even_writer.insert_pdf(doc, from_page=page_num, to_page=page_num)

    odd_writer.save('example1.pdf')
    even_writer.save('example2.pdf')

合并PDF文件

你可以将多个PDF文件合并为一个:

import fitz

# 使用PymuPDF合并两个pdf文件
if __name__ == '__main__':
    # 打开要合并的 PDF 文件
    pdf_files = ['example1.pdf', 'example2.pdf']

    # 创建一个新的 PDF 文档对象
    merged_doc = fitz.open()

    # 遍历每个要合并的 PDF 文件
    for pdf_file in pdf_files:
        # 打开当前的 PDF 文件
        temp_doc = fitz.open(pdf_file)
        # 将当前 PDF 文件的所有页面添加到合并后的文档中
        for page_num in range(len(temp_doc)):
            merged_doc.insert_pdf(temp_doc, from_page=page_num, to_page=page_num)
        # 关闭当前的 PDF 文件(不需要保存,因为我们只是读取它)
        temp_doc.close()

    # 保存合并后的 PDF 文件
    merged_doc.save("merged.pdf")

裁剪PDF页面

PyPDF2并不直接支持裁剪页面,但你可以通过提取页面的部分内容并创建一个新的页面来实现这一功能。以下是一个简单的示例,演示如何裁剪页面的上半部分:

import fitz

# 使用pymupdf裁剪PDF页面
if __name__ == '__main__':

    # 打开 PDF 文件
    doc = fitz.open("example.pdf")

    # 选择要裁剪的页面(例如第一页)
    page = doc.load_page(0)

    # 定义裁剪区域(矩形,格式为 [x0, y0, x1, y1])
    # 这里我们裁剪页面的上半部分
    rect = [page.rect.x0, page.rect.y0, page.rect.x1, page.rect.y0 + (page.rect.height / 2)]

    # 裁剪页面(这会改变原始页面)
    page.set_cropbox(rect)
    page.clean_contents()  # 清理页面内容(可选,但推荐)

    # 保存修改后的 PDF 文件
    doc.save("cropped_example.pdf")

加密PDF

import fitz

# 使用PyPDF2加密pdf
if __name__ == '__main__':
    doc = fitz.open("example.pdf")

    # 设置加密参数
    doc.save(
        "encrypted.pdf",
        encryption=fitz.PDF_ENCRYPT_AES_256,  # 加密算法
        user_pw="password123",  # 用户密码(打开密码)
        owner_pw="password123",  # 所有者密码
        permissions=0b1111000000,  # 权限标志
        garbage=3,  # 清理冗余数据
        deflate=True,  # 压缩内容
    )

与pypdf2的比较

PyPDF2:

  • 基础操作:专注于PDF的合并、拆分、页面旋转、加密/解密、添加水印等基础功能。

  • 文本提取:支持简单文本提取,但对复杂布局(如双栏排版、表格)的支持较弱,可能破坏文本顺序。

  • 轻量级:适合轻量级任务,如快速合并多个文档或添加密码保护。

  • 大文件处理:处理大文件(如7000页以上)时速度较慢(需数百秒),内存占用较高。

  • 复杂文档兼容性:对含复杂图形、表单或加密文件的处理可能失败,文本提取易出现乱码。

PyMuPDF:

  • 全能处理:支持PDF的读取、编辑、合并、拆分,同时能提取文本、图像、表格,甚至支持OCR识别和PDF转图像。

  • 高级功能:可解析表格(保留列表结构)、处理注释和表单、生成PDF/A格式文档,以及通过Tesseract集成实现OCR。

  • 多格式支持:兼容PDF、XPS、CBZ等格式,适用场景更广泛。

  • 大文件处理:基于MuPDF引擎,采用优化算法,处理同样文件仅需几秒,支持多线程加速,渲染图像效率更高。

  • 复杂文档兼容性:在处理扫描件、加密文档时表现更稳定,且能保留双栏文本的原始顺序

以上就是Python使用PyMuPDF操作PDF的代码示例的详细内容,更多关于Python PyMuPDF操作PDF的资料请关注脚本之家其它相关文章!

相关文章

  • 详解如何使用pandas进行时间序列数据的周期转换

    详解如何使用pandas进行时间序列数据的周期转换

    时间序列数据是数据分析中经常遇到的类型,为了更多的挖掘出数据内部的信息,我们常常依据原始数据中的时间周期,将其转换成不同跨度的周期,下面以模拟的K线数据为例,演示如何使用pandas来进行周期转换,感兴趣的朋友可以参考下
    2024-05-05
  • 使用coverage统计python web项目代码覆盖率的方法详解

    使用coverage统计python web项目代码覆盖率的方法详解

    这篇文章主要介绍了使用coverage统计python web项目代码覆盖率的方法,详细分析了coverage的安装以及coverage命令统计py文件相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • Python实现对字符串中字符提取校验

    Python实现对字符串中字符提取校验

    众所周知,python之所以很方便在一定程度上是因为随时都可能有人又创作了一个好用又方便的python非标准库。本文就来用Python实现对字符串中字符进行提取校验,需要的可以参考一下
    2022-10-10
  • ubuntu 16.04下python版本切换的方法

    ubuntu 16.04下python版本切换的方法

    这篇文章主要为大家详细介绍了ubuntu 16.04下python版本切换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • python变量命名的7条建议

    python变量命名的7条建议

    这篇文章主要介绍了python变量命名的7条建议,如何给变量命名,如何让它变得有意义成了程序员不可逾越的难题,需要的朋友可以参考下
    2019-07-07
  • Python处理XML格式数据的方法详解

    Python处理XML格式数据的方法详解

    这篇文章主要介绍了Python处理XML格式数据的方法,结合实例形式详细分析了Python针对xml格式文件的编码处理、常见错误及相关操作注意事项,需要的朋友可以参考下
    2017-03-03
  • Python实现文件压缩和解压的示例代码

    Python实现文件压缩和解压的示例代码

    这篇文章主要介绍了Python实现文件压缩和解压的方法,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • Python web框架之tornado的使用

    Python web框架之tornado的使用

    tornado是一个用Python语言写成的Web服务器兼Web应用框架,本文主要介绍了Python web框架之tornado的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • python购物车程序简单代码

    python购物车程序简单代码

    这篇文章主要为大家详细介绍了python购物车程序的简单代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • 浅析python 字典嵌套

    浅析python 字典嵌套

    这篇文章主要介绍了python 字典嵌套的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09

最新评论