Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
使用 PyMuPDF 按页码范围分割 PDF 并保留目录_创想鸟

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

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

本文档旨在提供一个使用 PyMuPDF 库分割 PDF 文件并保留对应目录的教程。我们将介绍如何提取原始 PDF 的目录,针对分割后的每个部分,调整目录结构以符合 PyMuPDF 的规范,并将调整后的目录添加到分割后的 PDF 文件中,确保分割后的文档仍然具有完整的导航功能。### 前提条件确保已经安装了 PyMuPDF 库。如果没有安装,可以使用 pip 进行安装:“`bashpip install pymupdf

提取目录

首先,我们需要从原始 pdf 文件中提取目录。pymupdf 提供了 document.get_toc() 方法来获取目录信息。目录信息以嵌套列表的形式返回,每个子列表代表一个目录项,包含层级、标题和页码。

import fitzdef extract_toc(input_pdf_path):    """    从 PDF 文件中提取目录。    Args:        input_pdf_path (str): 输入 PDF 文件的路径。    Returns:        list: 目录列表,每个元素是一个包含层级、标题和页码的列表。    """    pdf_document = fitz.open(input_pdf_path)    toc = pdf_document.get_toc()    pdf_document.close()    return toc

分割 PDF 并调整目录

接下来,我们需要根据指定的页码范围分割 PDF 文件,并为每个分割后的文件调整目录。关键在于,分割后的每个 PDF 的目录必须符合 PyMuPDF 的目录规则:

第一个目录项的层级必须为 1。后续目录项的层级只能与前一个目录项相同、高一级或低于前一个目录项。

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):        # 创建新的 PDF 文件        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:            first_level = chapter_toc[0][0]            if first_level != 1:                for j in range(1, first_level):                    chapter_toc.insert(0, [j, "dummy", 1])        # 设置目录        chapter_pdf.set_toc(chapter_toc)        # 保存新的 PDF 文件        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, 10), (11, 20), (21, 30)]  # 定义页码范围split_pdf_with_toc(input_pdf_path, output_folder, page_ranges)

在这个例子中,我们将 input.pdf 文件分割成三个部分,分别包含第 1-10 页、第 11-20 页和第 21-30 页。分割后的文件将保存在 output 文件夹中,文件名分别为 Chapter_1.pdf、Chapter_2.pdf 和 Chapter_3.pdf。每个分割后的 PDF 文件都将包含与其内容对应的目录。

注意事项

页码计算: 在调整目录时,需要重新计算分割后 PDF 文件的页码。目录规则: 确保调整后的目录符合 PyMuPDF 的规则,否则可能导致目录显示不正确。错误处理: 在实际应用中,应该添加适当的错误处理机制,例如处理文件不存在、页码范围无效等情况。目录提取的准确性: 某些PDF可能存在目录结构复杂或不规范的情况,提取的目录可能不完全准确,需要根据实际情况进行调整。

总结

通过使用 PyMuPDF 库,我们可以方便地分割 PDF 文件并保留目录。关键在于理解 PyMuPDF 的目录规则,并根据这些规则调整分割后 PDF 文件的目录结构。希望本教程能够帮助你更好地处理 PDF 文件。


以上就是使用 PyMuPDF 按页码范围分割 PDF 并保留目录的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1369397.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
分割PDF并动态生成目录(TOC)的PyMuPDF专业指南
上一篇 2025年12月14日 09:37:54
高效拆分PDF并精确保留目录结构(PyMuPDF教程)
下一篇 2025年12月14日 09:38:01

相关推荐

  • SublimeText如何管理多个项目窗口_Workspace工作区使用方法

    SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法SublimeText如何管理多个项目窗口_Workspace工作区使用方法

    Sublime Text通过项目文件(.sublime-project)和工作区文件(.sublime-workspace)实现多项目高效管理,前者保存共享的静态配置如文件夹结构和构建系统,建议提交至版本控制;后者记录个人动态状态如打开文件、光标位置和布局,应被忽略以避免冲突。使用“快速切换项目”功…

    2026年9月28日 • 用户投稿
    100
  • Java中List of Lists按指定列排序与查找教程

    Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程Java中List of Lists按指定列排序与查找教程

    本教程详细介绍了如何在Java中处理List<List>数据结构,以实现按指定“列”进行排序,并在此基础上高效查找包含特定值的“行”。文章通过自定义Comparator来对行数据进行比较和排序,并提供了识别目标列索引的策略,从而解决了在复杂嵌套列表中进行数据组织和检索的常见挑战。 1. …

    2026年9月28日 • 用户投稿
    100
  • 豆包AI安装后如何配置TPU加速 豆包AI张量处理器优化方案

    本文将详细介绍在豆包AI环境中,如何配置张量处理器(TPU)以实现加速优化。我们将从理解TPU的基本原理开始,逐步讲解安装驱动、设置环境以及验证加速效果的整个过程,旨在帮助用户高效地利用TPU提升豆包AI模型的训练和推理性能。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 D…

    2026年9月28日
    200
  • 微博怎么举报用户_微博用户举报操作方法

    微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法微博怎么举报用户_微博用户举报操作方法

    可通过用户主页、单条微博或私信三种方式举报违规行为。进入主页点击“更多”选择举报,或在微博详情页点击“更多”举报内容,私信中长按消息气泡亦可发起举报,需选择类别并提交证据,系统将审核处理。 如果您在微博上遇到骚扰、虚假信息或不当言论的用户,可以通过平台提供的举报功能进行反馈,以维护网络环境的健康有序…

    2026年9月28日 • 用户投稿
    000
  • Linux学习笔记(二)系统基础操作

    Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作Linux学习笔记(二)系统基础操作

    Linux基础学习笔记精选专栏 本专栏由小雨ttt创建,致力于分享学习linux基础知识的过程。本专栏不是机械地介绍linux指令集,而是包含了作者亲自实践的操作过程,站在一个初学者的角度理解linux基础知识。 目前本专栏包含的内容有: Linux学习笔记(一)使用文本编辑器VimLinux学习笔…

    2026年9月28日 • 用户投稿
    000
  • 华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)

    华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)华为手机维修模式的一键开启方法(快速了解如何进入华为手机的维修模式)

    华为手机作为一款在全球范围内广受欢迎的手机品牌,其稳定性和性能备受用户青睐。然而,有时我们会遇到一些问题,需要进入手机的维修模式来解决。本文将详细介绍如何通过一键操作进入华为手机的维修模式,帮助用户快速解决手机问题。 盘古大模型 华为云推出的一系列高性能人工智能大模型 35 查看详情 段落1.确保你…

    2026年9月28日 • 用户投稿
    000
  • 快手真宝仓怎么绑?快手平台的真宝仓

    快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓快手真宝仓怎么绑?快手平台的真宝仓

    随着短视频平台的兴起,快手已成为众多用户钟爱的社交平台之一。其中,真宝仓作为快手电商为特定类目(如珠宝玉石)打造的官方仓储物流服务,备受商家关注。不少新入驻的商家对于如何接入真宝仓感到困惑。别急,今天就来为大家详细讲解一下快手真宝仓的接入方法,让你轻松上手! 一、什么是快手真宝仓? 快手真宝仓是快手…

    2026年9月28日 • 用户投稿
    200
  • 博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”

    博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”博主称小米 Civi 系列涨价已是定数 但配置不会被“阉割”

    日前,cnmo 注意到,有数码博主发文称,小米 civi 系列的涨价已成定局。此前小米 13/14 系列的成功冲高,为小米品牌溢价打下了坚实的基础。自小米 14 ultra 问世以来,小米品牌溢价的现象愈发明显,civi 系列自然也会跟随这一趋势。但值得注意的是,小米并不会利用品牌溢价去削减产品质量…

    2026年9月28日 • 用户投稿
    000
  • 360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案

    360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案360极速浏览器提示“喔唷,崩溃啦”怎么解决_浏览器崩溃问题常见原因及修复方案

    首先优化内存与缓存设置,启用自动释放内存和清理缓存功能;其次使用浏览器内置的一键修复工具扫描并修复异常;若问题依旧,建议卸载后重新安装最新版浏览器;最后可借助360安全卫士等第三方工具进行系统级修复,排除插件冲突或组件损坏问题。 如果您在使用360极速浏览器时遇到“喔唷,崩溃啦”的提示,这通常意味着…

    2026年9月28日 • 用户投稿
    300
  • sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法sublime怎么保存时自动格式化代码_Sublime配置保存时自动格式化代码方法

    安装插件并配置可实现Sublime Text保存时自动格式化代码,提升代码可读性与一致性。首先安装Package Control包管理器,通过控制台执行指定代码完成安装;重启后使用命令面板(Ctrl+Shift+P)调出Package Control: Install Package,搜索并安装所需…

    2026年9月28日 • 用户投稿
    700
  • 建立MySQL中买菜系统的配送区域表

    建立MySQL中买菜系统的配送区域表建立MySQL中买菜系统的配送区域表建立MySQL中买菜系统的配送区域表建立MySQL中买菜系统的配送区域表

    建立MySQL中买菜系统的配送区域表,需要具体代码示例 在买菜系统中,配送区域是一个重要的信息,它决定了哪些地区能够享受到买菜配送服务。为了方便管理和查询,我们可以在MySQL数据库中建立配送区域表。 首先,我们需要为配送区域表确定一些基本的字段,例如区域名称、省份、城市、区、详细地址等。接下来,我…

    2026年9月28日 • 用户投稿
    000
  • 鸿蒙系统装机量突破1850万台!年底有望达3000万

    鸿蒙系统装机量突破1850万台!年底有望达3000万鸿蒙系统装机量突破1850万台!年底有望达3000万鸿蒙系统装机量突破1850万台!年底有望达3000万鸿蒙系统装机量突破1850万台!年底有望达3000万

    9月25日,一位博主透露,鸿蒙系统的装机量已超过1850万台,预计到今年年底将冲刺3000万台大关。 据该博主分享的数据图显示,从9月5日至9月25日的短短20天内,鸿蒙系统新增装机量达340.91万台,日均增长约16.2万台,平均每日增幅为1.1%。 这一迅猛增长背后,是鸿蒙生态体系的全面崛起。根…

    2026年9月28日 • 用户投稿
    200
  • 如何设置24G和5G网络(一步步教你设置24G和5G网络)

    如何设置24G和5G网络(一步步教你设置24G和5G网络)如何设置24G和5G网络(一步步教你设置24G和5G网络)如何设置24G和5G网络(一步步教你设置24G和5G网络)如何设置24G和5G网络(一步步教你设置24G和5G网络)

    在现代社会中,无线网络已成为我们生活中不可或缺的一部分。然而,由于信号干扰和设备限制等原因,我们常常遇到网络速度慢或者不稳定的问题。为了解决这些问题,本文将详细介绍如何设置24g和5g网络,并提供一些实用的技巧,以帮助您获得更快速和稳定的网络连接。 虎课网 虎课网是超过1800万用户信赖的自学平台,…

    2026年9月28日 • 用户投稿
    100
  • Linux Fuse简介及应用领域分析

    Linux Fuse简介及应用领域分析Linux Fuse简介及应用领域分析Linux Fuse简介及应用领域分析Linux Fuse简介及应用领域分析

    Linux Fuse简介及应用领域分析 引言在当前的信息技术领域中,Linux操作系统被广泛应用于各种系统和服务中。而Linux Fuse(Filesystem in Userspace)作为一个用户态文件系统框架,为开发者提供了在用户空间实现文件系统的能力,极大地拓展了Linux文件系统的应用范围…

    2026年9月28日 • 用户投稿
    000
  • 原神翠黛峰阿嘟位置在哪 翠黛峰周游壶灵阿嘟位置介绍

    原神翠黛峰阿嘟位置在哪 翠黛峰周游壶灵阿嘟位置介绍原神翠黛峰阿嘟位置在哪 翠黛峰周游壶灵阿嘟位置介绍原神翠黛峰阿嘟位置在哪 翠黛峰周游壶灵阿嘟位置介绍原神翠黛峰阿嘟位置在哪 翠黛峰周游壶灵阿嘟位置介绍

    在《原神》中,玩家可前往周游壶灵阿嘟处购买尘歌壶所需的各类物品。翠黛峰的阿嘟会在数春峰、捉夏峰、抱秋峰和扫冬峰之间随机刷新,以下是各个区域的具体刷新点位,喜欢布置壶中洞天的旅行者千万不要错过。 原神翠黛峰周游壶灵阿嘟刷新位置汇总: 一区·数春峰:刷新点通常位于地图边缘附近。 二区·捉夏峰:常见于桥梁…

    2026年9月28日 • 用户投稿
    100
  • 百度搜索app如何快速切换账号_百度搜索app多账号管理的操作方法

    百度搜索app如何快速切换账号_百度搜索app多账号管理的操作方法百度搜索app如何快速切换账号_百度搜索app多账号管理的操作方法百度搜索app如何快速切换账号_百度搜索app多账号管理的操作方法百度搜索app如何快速切换账号_百度搜索app多账号管理的操作方法

    1、可通过设置菜单退出当前账号后登录新账号实现切换;2、安卓用户可使用应用分身功能创建百度App双开实例,分别登录不同账号;3、符合条件的iOS设备可利用巨魔商店安装修改版百度App实现多开,从而同时登录多个账号。 如果您需要在百度搜索App中频繁使用不同的账号进行登录,但每次都需要退出再重新登录,…

    2026年9月28日 • 用户投稿
    1100
  • 在 Java 中对 List 的指定列进行排序和查找

    在 Java 中对 List 的指定列进行排序和查找在 Java 中对 List 的指定列进行排序和查找在 Java 中对 List 的指定列进行排序和查找在 Java 中对 List 的指定列进行排序和查找

    本文将详细介绍如何在 Java 中处理 List<List> 类型的数据,并实现以下功能:对指定列进行排序,在排序后的列表中使用二分查找(或类似方法)查找特定元素,并输出包含该元素的完整行。 问题背景 在实际开发中,我们经常会遇到需要处理二维数据的情况,例如从 CSV 文件读取的数据或者…

    2026年9月28日 • 用户投稿
    000
  • Windows记事本应用现在可以从Microsoft Store中获得

    Windows记事本应用现在可以从Microsoft Store中获得Windows记事本应用现在可以从Microsoft Store中获得Windows记事本应用现在可以从Microsoft Store中获得Windows记事本应用现在可以从Microsoft Store中获得

    早在2019年8月,微软就曾宣布计划将广受欢迎的Windows记事本应用迁移至应用商店,旨在提升其更新频率与运行效率。然而,到了同年12月底,微软突然叫停了这一计划,且未作过多解释。如今,这一目标终于得以实现——Windows记事本现已重新上线于微软应用商店,供用户下载使用。 自从Windows系统…

    2026年9月28日 • 用户投稿
    300
  • 在国内可以用的比较好的ai图片生成工具2025十大排名

    在国内可以用的比较好的ai图片生成工具2025十大排名在国内可以用的比较好的ai图片生成工具2025十大排名在国内可以用的比较好的ai图片生成工具2025十大排名在国内可以用的比较好的ai图片生成工具2025十大排名

    答案:2025年国内AI图片生成工具将更注重本地化、移动端体验、版权保护、个性化定制及行业融合,代表工具如稿定设计、盗梦师、Vega AI等,选择应基于用户需求、创作目的与预算,AI不会取代艺术家,而是辅助创作。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek…

    2026年9月28日 • 用户投稿
    1000
  • 打破次元壁!海信新风空调与王者荣耀共创电竞体验新纪元

    打破次元壁!海信新风空调与王者荣耀共创电竞体验新纪元打破次元壁!海信新风空调与王者荣耀共创电竞体验新纪元打破次元壁!海信新风空调与王者荣耀共创电竞体验新纪元打破次元壁!海信新风空调与王者荣耀共创电竞体验新纪元

    近日,awe 2024 中国家电及消费电子博览会上,海信空调以其前瞻性的战略眼光和创新精神,再次站在了家电行业的潮头。这一次,海信空调不仅带来了一系列引领行业趋势的家电新品,更宣布与国内知名电子竞技俱乐部——王者荣耀职业战队:重庆狼队王者荣耀分部正式达成深度合作,联合发布 ” 战神系列 …

    2026年9月28日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信