Python使用pypdf按指定页码范围批量拆分PDF

Written by

in

文章目录
  • from pypdf import PdfReader, PdfWriter import os def split_pdf_by_page_ranges(input_pdf, output_folder, ranges): reader = PdfReader(input_pdf) # 创建输出目录 if not os.path.exists(output_folder): os.makedirs(output_folder) for idx, (start_page, end_page) in enumerate(ranges, 1): writer = PdfWriter() # PDF 内部页码从 0 开始,因此要 -1 for page_num in range(start_page – 1, end_page): if page_num < len(reader.pages): writer.add_page(reader.pages[page_num]) else: print(f”Warning: page {page_num + 1} out of range.”) output_filename = ( f”{output_folder}/chapter_{idx}_pages_{start_page}-{end_page}.pdf” ) with open(output_filename, “wb”) as output_file: writer.write(output_file) print(f”Saved {output_filename}”)
  • 你只需要定义一个 页码区间列表,格式如下: # ✏️ 自定义分章节页码(格式:[(开始页, 结束页), …]) page_ranges = [ (1, 34), # 序 (35, 50), # 第一章 (51, 73), # 第二章 (74, 93), # 第三章 (94, 118), # 第四章 (119, 152), # 第五章 (153, 166), # 第六章 (167, 183), # 第七章 (184, 206), # 第八章 (207, 230), # 第九章 (231, 251), # 第十章 ] 注意事项: 页码是 PDF 阅读器中看到的页码 不需要关心 0 / 1 的问题,代码已处理 超出 PDF 总页数会自动提示 Warning,不会报错
  • split_pdf_by_page_ranges( “input.pdf”, “./output_manual_split”, page_ranges ) 执行后目录结构如下: output_manual_split/├── chapter_1_pages_1-34.pdf├── chapter_2_pages_35-50.pdf├── chapter_3_pages_51-73.pdf├── …└── chapter_11_pages_231-251.pdf 完整代码 from pypdf import PdfReader, PdfWriter import os def split_pdf_by_page_ranges(input_pdf, output_folder, ranges): reader = PdfReader(input_pdf) if not os.path.exists(output_folder): os.makedirs(output_folder) for idx, (start_page, end_page) in enumerate(ranges, 1): writer = PdfWriter() # 页码从 0 开始,用户输入通常是从 1 开始 for page_num in range(start_page – 1, end_page): if page_num < len(reader.pages): writer.add_page(reader.pages[page_num]) else: print(f”Warning: page {page_num + 1} out of range.”) output_filename = f”{output_folder}/chapter_{idx}_pages_{start_page}-{end_page}.pdf” with open(output_filename, “wb”) as output_file: writer.write(output_file) print(f”Saved {output_filename}”) # ✏️ 自定义你的分章节页码(格式:[(开始页, 结束页), …]) page_ranges = [ (1, 34), # 序 (35, 50), # 第一章 (51, 73), # 第二章 (74,93), # 第三章 (94,118), # 第四章 (119,152), # 第五章 (153,166), # 第六章 (167,183), # 第七章 (184,206), # 第八章 (207,230), # 第九章 (231,251), # 第十章 ] # 用法示例 split_pdf_by_page_ranges(“input.pdf”, “./output_manual_split”, page_ranges) 以上就是Python使用pypdf按指定页码范围批量拆分PDF的详细内容,更多关于Python pypdf拆分PDF的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: 基于Python实现进阶版PDF合并/拆分工具 Python实现合并与拆分多个PDF文档中的指定页 Python进行PDF文件拆分的示例详解 Python实现将PDF文件拆分任意页数 Python如何将PDF拆分成多个文件(最新推荐) Python自动化办公之编写PDF拆分工具 Python利用PyPDF2快速拆分PDF文档 Python实现简单拆分PDF文件的方法
  • 目录
    • 一、环境准备
      • Python 版本
      • 安装 pypdf
    • 二、实现思路说明
      • 关键点解析
      • 适用场景
    • 三、完整 Python 实现代码
      • 四、自定义章节页码范围
        • 五、执行拆分

          在处理电子书、扫描书籍或技术文档时,经常会遇到一个需求:

          按照指定页码范围,把一个 PDF 拆分成多个 PDF 文件(例如按章节拆分)

          本文将介绍一种简单、稳定、无需外部依赖的方法,使用 Python 的 pypdf 库来实现 PDF 的批定页码分割。

          Python 3.8+(推荐 3.9 / 3.10 / 3.11)

          可用以下命令确认:

          python --version
          

          使用 pip 安装最新版 pypdf:

          pip install pypdf
          

          如果你在 Linux / macOS 上,且存在 Python2/3 共存问题,可使用:

          pip3 install pypdf
          

          安装完成后测试是否成功:

          from pypdf import PdfReader, PdfWriter
          print("pypdf installed OK")
          

          • PdfReader:读取原始 PDF
          • PdfWriter:创建新的 PDF 文件
          • PDF 页码从 0 开始,而我们日常看到的是从 1 开始
          • 用户只需定义一个页码范围列表即可完成拆分

          • 按目录拆书
          • 按章节导出
          • 按页码人工校正后的分割

          from pypdf import PdfReader, PdfWriter
          import os
          
          
          def split_pdf_by_page_ranges(input_pdf, output_folder, ranges):
              reader = PdfReader(input_pdf)
          
              # 创建输出目录
              if not os.path.exists(output_folder):
                  os.makedirs(output_folder)
          
              for idx, (start_page, end_page) in enumerate(ranges, 1):
                  writer = PdfWriter()
          
                  # PDF 内部页码从 0 开始,因此要 -1
                  for page_num in range(start_page - 1, end_page):
                      if page_num < len(reader.pages):
                          writer.add_page(reader.pages[page_num])
                      else:
                          print(f"Warning: page {page_num + 1} out of range.")
          
                  output_filename = (
                      f"{output_folder}/chapter_{idx}_pages_{start_page}-{end_page}.pdf"
                  )
          
                  with open(output_filename, "wb") as output_file:
                      writer.write(output_file)
          
                  print(f"Saved {output_filename}")
          

          你只需要定义一个 页码区间列表,格式如下:

          # ✏️ 自定义分章节页码(格式:[(开始页, 结束页), ...])
          page_ranges = [
              (1, 34),    # 序
              (35, 50),   # 第一章
              (51, 73),   # 第二章
              (74, 93),   # 第三章
              (94, 118),  # 第四章
              (119, 152), # 第五章
              (153, 166), # 第六章
              (167, 183), # 第七章
              (184, 206), # 第八章
              (207, 230), # 第九章
              (231, 251), # 第十章
          ]
          

          注意事项

          • 页码是 PDF 阅读器中看到的页码
          • 不需要关心 0 / 1 的问题,代码已处理
          • 超出 PDF 总页数会自动提示 Warning,不会报错

          split_pdf_by_page_ranges(
              "input.pdf",
              "./output_manual_split",
              page_ranges
          )
          

          执行后目录结构如下:

          output_manual_split/
          ├── chapter_1_pages_1-34.pdf
          ├── chapter_2_pages_35-50.pdf
          ├── chapter_3_pages_51-73.pdf
          ├── …
          └── chapter_11_pages_231-251.pdf

          完整代码

          from pypdf import PdfReader, PdfWriter
          import os
          
          
          def split_pdf_by_page_ranges(input_pdf, output_folder, ranges):
              reader = PdfReader(input_pdf)
          
          
              if not os.path.exists(output_folder):
                  os.makedirs(output_folder)
          
          
              for idx, (start_page, end_page) in enumerate(ranges, 1):
                  writer = PdfWriter()
          
          
                  # 页码从 0 开始,用户输入通常是从 1 开始
                  for page_num in range(start_page - 1, end_page):
                      if page_num < len(reader.pages):
                          writer.add_page(reader.pages[page_num])
                      else:
                          print(f"Warning: page {page_num + 1} out of range.")
          
                  output_filename = f"{output_folder}/chapter_{idx}_pages_{start_page}-{end_page}.pdf"
                  with open(output_filename, "wb") as output_file:
                      writer.write(output_file)
          
          
                  print(f"Saved {output_filename}")
          
          
          # ✏️ 自定义你的分章节页码(格式:[(开始页, 结束页), ...])
          page_ranges = [
              (1, 34),   # 序
              (35, 50),  # 第一章
              (51, 73),  # 第二章
              (74,93),   # 第三章
              (94,118),     # 第四章
              (119,152),      # 第五章
              (153,166),      # 第六章
              (167,183),      # 第七章
              (184,206),      # 第八章
              (207,230),      # 第九章
              (231,251),      # 第十章
          ]
          
          
          # 用法示例
          split_pdf_by_page_ranges("input.pdf", "./output_manual_split", page_ranges)
          

          以上就是Python使用pypdf按指定页码范围批量拆分PDF的详细内容,更多关于Python pypdf拆分PDF的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • 基于Python实现进阶版PDF合并/拆分工具
          • Python实现合并与拆分多个PDF文档中的指定页
          • Python进行PDF文件拆分的示例详解
          • Python实现将PDF文件拆分任意页数
          • Python如何将PDF拆分成多个文件(最新推荐)
          • Python自动化办公之编写PDF拆分工具
          • Python利用PyPDF2快速拆分PDF文档
          • Python实现简单拆分PDF文件的方法

          站内搜索