开发者

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

开发者 https://www.devze.com 2026-01-05 09:22 出处:网络 作者: weixin_46244623
价值2999元 Java视频教程限时免费下载
专为Java开发者设计,涵盖核心技术、架构设计、性能优化等
立即下载
目录一、环境准备python 版本安装 pypdf二、实现思路说明关键点解析适用场景三、完整 Python 实现代码四、自定义章节页码范围五、执行拆分在处理电子书、扫描书籍或技术文档时,经常会遇到一个需求:
目录
  • 一、环境准备
    • python 版本
    • 安装 pypdf
  • 二、实现思路说明
    • 关键点解析
    • 适用场景
  • 三、完整 Python 实现代码
    • 四、自定义章节页码范围
      • 五、执行拆分

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

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

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

        一、环境准备

        Python 版本

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

        可用以下命令确认:

        python --version
        

        安装 pypdf

        使用 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 开始
        • 用户只需定义一个页码范围列表即可完成拆分

        适用场景

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

        三、完整 Python 实现代码

        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 内部页码从 javascript0 开始,因此要 -1
                for page_num in range(start_page - 1, end_page):
                www.devze.com    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),  # 第四章
            (kWvXFpQ119, 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}.pjsdf"
                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的资料请关注编程客栈(www.devze.com)其它相关文章!

        0
        价值2999元 Java视频教程限时免费下载
        专为Java开发者设计,涵盖核心技术、架构设计、性能优化等
        立即下载

        精彩评论

        暂无评论...
        验证码 换一张
        取 消