以下代码演示了如何使用 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 文件。
- 目录结构规则: PyMuPDF 对目录结构有严格的要求。目录项必须按照层级顺序排列,且第一个目录项的层级必须为 1。如果提取的目录不符合这些规则,需要进行调整,例如添加 "dummy" 条目。
- 页码更新: 在提取目录时,需要更新页码,使其在新 PDF 文件中有效。
- 异常处理: 在实际应用中,建议添加异常处理机制,以处理文件不存在、权限不足等问题。
- 性能优化: 对于大型 PDF 文件,分割过程可能比较耗时。可以考虑使用多线程或多进程来提高分割效率。
使用 PyMuPDF 可以方便地分割 PDF 文件,并保留对应的目录信息。通过理解 PyMuPDF 的目录结构规则,并进行相应的处理,可以确保分割后的 PDF 文件具有完整的导航功能。 本教程提供了一个基本的示例,您可以根据实际需求进行修改和扩展。
以上就是# 使用 PyMuPDF 按页码范围分割 PDF 并保留目录的详细内容,更多请关注知识资源分享宝库其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。