0

0

# 使用 PyMuPDF 按页码范围分割 PDF 并保留目录

心靈之曲

心靈之曲

发布时间:2025-08-31 15:45:00

|

243人浏览过

|

来源于php中文网

原创

# 使用 PyMuPDF 按页码范围分割 PDF 并保留目录

本文档介绍如何使用 PyMuPDF 库,根据指定的页码范围分割 PDF 文件,并在分割后的 PDF 文件中保留对应的目录 (Table of Contents)。我们将详细讲解如何提取、修改和应用目录,以确保分割后的文档具有完整的导航功能。同时,也会针对目录结构的特殊规则进行说明,并提供相应的解决方案,确保生成的 PDF 文件符合标准。 ## 使用 PyMuPDF 分割 PDF 并保留目录 在处理大型 PDF 文档时,有时需要将其分割成更小的部分,以便于管理和分发。如果原始 PDF 文档包含目录,那么在分割后的文档中保留相应的目录信息就显得尤为重要。PyMuPDF (fitz) 库提供了强大的 PDF 处理功能,可以方便地实现这一目标。 ### 1. 安装 PyMuPDF 首先,需要安装 PyMuPDF 库。可以使用 pip 命令进行安装: ```bash pip install pymupdf

2. 代码实现

以下代码演示了如何使用 pymupdf 分割 pdf 文件,并根据页码范围保留对应的目录:

import fitz

def split_pdf_with_toc(input_pdf_path, output_folder, page_ranges):
    """
    分割 PDF 文件,并保留对应页码范围的目录。

    Args:
        input_pdf_path (str): 输入 PDF 文件的路径。
        output_folder (str): 输出文件夹的路径。
        page_ranges (list): 一个包含元组的列表,每个元组表示一个页码范围 (起始页码, 结束页码)。
    """

    pdf_document = fitz.open(input_pdf_path)
    original_toc = pdf_document.get_toc()

    for i, (start_page, end_page) in enumerate(page_ranges, start=1):
        chapter_pdf = fitz.open()
        chapter_pdf.insert_pdf(pdf_document, from_page=start_page - 1, to_page=end_page - 1)

        # 提取对应页码范围的目录
        chapter_toc = []
        for level, title, page in original_toc:
            if start_page <= page <= end_page:
                chapter_toc.append([level, title, page - start_page + 1]) # 更新页码

        # 处理目录结构,确保符合规范
        if chapter_toc:
            if chapter_toc[0][0] != 1:
                # 添加 dummy items 直到 level 为 1
                current_level = chapter_toc[0][0]
                for j in range(1, current_level):
                    chapter_toc.insert(0, [j, "dummy", 1])

        chapter_pdf.set_toc(chapter_toc)

        output_pdf_path = f"{output_folder}/Chapter_{i}.pdf"
        chapter_pdf.save(output_pdf_path)
        chapter_pdf.close()

    pdf_document.close()

# 示例用法
input_pdf_path = "input.pdf" # 替换为你的输入 PDF 文件路径
output_folder = "output"      # 替换为你的输出文件夹路径
page_ranges = [(1, 50), (51, 100)] # 指定要分割的页码范围
split_pdf_with_toc(input_pdf_path, output_folder, page_ranges)

3. 代码解释

  • split_pdf_with_toc(input_pdf_path, output_folder, page_ranges) 函数:
    • 接受输入 PDF 文件路径、输出文件夹路径和页码范围列表作为参数。
    • 打开输入的 PDF 文件,并使用 pdf_document.get_toc() 获取原始目录。
    • 遍历页码范围列表,为每个范围创建一个新的 PDF 文件。
    • 使用 chapter_pdf.insert_pdf() 将指定页码范围的内容插入到新的 PDF 文件中。
    • 遍历原始目录,提取对应页码范围的目录项,并更新页码,使其在新 PDF 文件中有效。
    • 目录结构处理: 检查提取的目录,如果第一个目录项的层级 (level) 不是 1,则添加 "dummy" 条目,直到层级为 1,以符合 PyMuPDF 的目录结构要求。
    • 使用 chapter_pdf.set_toc() 将新的目录应用到分割后的 PDF 文件中。
    • 保存分割后的 PDF 文件,并关闭文件。
    • 关闭原始 PDF 文件。

4. 注意事项

  • 目录结构规则: PyMuPDF 对目录结构有严格的要求。目录项必须按照层级顺序排列,且第一个目录项的层级必须为 1。如果提取的目录不符合这些规则,需要进行调整,例如添加 "dummy" 条目。
  • 页码更新: 在提取目录时,需要更新页码,使其在新 PDF 文件中有效。
  • 异常处理: 在实际应用中,建议添加异常处理机制,以处理文件不存在、权限不足等问题。
  • 性能优化: 对于大型 PDF 文件,分割过程可能比较耗时。可以考虑使用多线程或多进程来提高分割效率。

5. 总结

使用 PyMuPDF 可以方便地分割 PDF 文件,并保留对应的目录信息。通过理解 PyMuPDF 的目录结构规则,并进行相应的处理,可以确保分割后的 PDF 文件具有完整的导航功能。 本教程提供了一个基本的示例,您可以根据实际需求进行修改和扩展。

AI Content Detector
AI Content Detector

Writer推出的AI内容检测工具

下载
					

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

337

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

405

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

750

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

337

2025.07.23

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

480

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

143

2025.12.24

PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

98

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

72

2025.11.13

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号