
以下代码演示了如何使用 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)使用 PyMuPDF 可以方便地分割 PDF 文件,并保留对应的目录信息。通过理解 PyMuPDF 的目录结构规则,并进行相应的处理,可以确保分割后的 PDF 文件具有完整的导航功能。 本教程提供了一个基本的示例,您可以根据实际需求进行修改和扩展。
以上就是# 使用 PyMuPDF 按页码范围分割 PDF 并保留目录的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号