使用Python拆分和提取PDF页面的三种常见方式

 更新时间:2026年10月01日 06:48:03   作者:用户835629078051  
实际工作中经常拿到几十页甚至上百页的 PDF——合并的季度报告、扫描的合同、批量导出的发票,手动用 PDF 编辑器拆分既低效又难以批量,用 Python 可以按页拆分整个文档,本文以 Spire.PDF for Python 为例,演示常见的拆分方式,需要的朋友可以参考下

前言

实际工作中经常拿到几十页甚至上百页的 PDF——合并的季度报告、扫描的合同、批量导出的发票。接收方往往只需要其中几页:把单页拆成独立文件分发,或者抽取某个页码区间交给不同的人处理。手动用 PDF 编辑器拆分既低效又难以批量。用 Python 可以按页拆分整个文档、提取指定页码、甚至把一个超长页面切成多页,方便接入自动化流程。本文以 Spire.PDF for Python 为例,演示这三种常见的拆分方式。

为什么用 Python 拆分 PDF

通过脚本拆分 PDF 有几个实际好处:

  • 批量处理:一次脚本处理成百上千个文件,无需人工逐个操作。
  • 拆分粒度灵活:既可以整档逐页拆,也可以只提取指定页,或对单个超长页面再切分。
  • 易于集成:拆分只是流水线中的一步,可以和下载、归档、邮件发送等操作衔接。

环境准备

安装 Spire.PDF 库:

pip install Spire.PDF

在脚本中引入模块:

from spire.pdf import *
from spire.pdf.common import *

将 PDF 拆分为单页文档

最直接的拆分方式是让每一页都变成一个独立的 PDF 文件。PdfDocument.Split() 用一个文件名模板即可完成,无需逐页操作:

from spire.pdf import *
from spire.pdf.common import *

# 加载 PDF 文档
doc = PdfDocument()
doc.LoadFromFile("Sample.pdf")

# 按文件名模板拆分,每一页生成一个独立 PDF
doc.Split("SplitDocument-{0}.pdf")

doc.Close()

Split() 接收一个包含 {0} 占位符的文件名模板,占位符会被替换成页码索引(从 0 开始)。一个 10 页的文档执行后会生成 SplitDocument-0.pdf 到 SplitDocument-9.pdf 共 10 个单页文件。拆分完成后调用 Close() 释放文档占用的资源。

提取指定页面生成新 PDF

更多场景是不需要全部页面,只挑出某几页组成新文档。思路是:新建一个 PdfDocument,为每个要提取的源页面添加一个同尺寸的新页面,再把源页内容绘制进去:

from spire.pdf import *
from spire.pdf.common import *

# 加载源文档
oldPdf = PdfDocument()
oldPdf.LoadFromFile("Sample.pdf")

# 新建目标文档
newPdf = PdfDocument()
page = None

# 提取索引 1、2 两页(页码从 0 开始)
for i in range(1, 3):
    # 添加与源页面同尺寸的页面
    page = newPdf.Pages.Add(oldPdf.Pages[i].Size, PdfMargins(0.0))
    # 把源页面内容绘制到新页面
    oldPdf.Pages[i].CreateTemplate().Draw(page, PointF(0.0, 0.0))

newPdf.SaveToFile("ExtractPages.pdf")
newPdf.Close()
oldPdf.Close()

Pages.Add() 的第一个参数传入源页面的 Size,保证新页面与源页面尺寸一致;PdfMargins(0.0) 把新页面边距设为 0,避免内容错位。CreateTemplate() 为源页面生成一个绘制模板,Draw() 把它原样画到新页面上,内容和排版都不会丢失。循环范围 range(1, 3) 表示提取第 2、3 页——改这个范围就能提取任意页码组合。

将一个长页面拆分为多页

还有一类特殊需求:源 PDF 里有一张很长的页面(比如长截图、连续表格),希望按标准页高切成多页。做法是新建一个高度只取源页一半的文档,再利用自动分页布局绘制源页内容:

from spire.pdf import *
from spire.pdf.common import *

# 加载源文档并获取第一页
doc = PdfDocument()
doc.LoadFromFile("LongPage.pdf")
page = doc.Pages[0]

# 新建文档:边距为 0,宽度不变,高度取源页的一半
newPdf = PdfDocument()
newPdf.PageSettings.Margins.All = 0.0
newPdf.PageSettings.Width = page.Size.Width
newPdf.PageSettings.Height = page.Size.Height / float(2)

# 添加新页面并设置自动分页布局
newPage = newPdf.Pages.Add()
format = PdfTextLayout()
format.Break = PdfLayoutBreakType.FitPage
format.Layout = PdfLayoutType.Paginate

# 绘制源页内容,内容超出页高时自动换页
page.CreateTemplate().Draw(newPage, PointF(0.0, 0.0), format)

newPdf.SaveToFile("SplitOnePage.pdf")
newPdf.Close()
doc.Close()

关键在 PdfTextLayout 的两个属性:Layout = PdfLayoutType.Paginate 表示绘制内容超出页面时自动分页,Break = PdfLayoutBreakType.FitPage 表示按页面高度截断。由于新页面高度是源页的一半,一页长内容会被平铺到两个标准页上;把高度除数改小,还能切成更多份。

实用提示

  • 输出位置:Split() 的文件名模板里可以带上路径前缀(如 "output/SplitDocument-{0}.pdf"),让拆分结果直接输出到指定目录。
  • 页码从 0 开始:提取页面时先用 doc.Pages.Count 确认总页数,再决定循环范围,避免索引越界。
  • 拆分粒度:长页切分时,Height 除以的数字越小,切出的页数越多,可按实际内容高度调整。
  • 资源释放:源文档和目标文档用完都调用 Close(),批量处理时尤其重要。
  • 免费版限制:Spire.PDF 的免费版对处理的页数有限制,大批量或大文档场景需注意这一约束。

总结

本文介绍了用 Python 拆分 PDF 文档的三种常见方式:用 Split() 把整个文档逐页拆成单页文件,用 CreateTemplate().Draw() 把指定页码提取成新文档,以及借助 PdfLayoutType.Paginate 自动分页把一个长页面切成多页。结合文件遍历和页码计算,这些操作可以轻松嵌入批量拆分、按人分发文档等自动化流程中。

以上就是使用Python拆分和提取PDF页面的方法示例的详细内容,更多关于Python拆分和提取PDF页面的资料请关注脚本之家其它相关文章!

相关文章

  • Python爬虫分析汇总

    Python爬虫分析汇总

    这篇文章主要详细的介绍了Python爬虫的相关资料,需要的朋友可以参考下面文章内容,希望能帮助到你
    2021-09-09
  • Python3如何判断三角形的类型

    Python3如何判断三角形的类型

    这篇文章主要介绍了Python3如何判断三角形的类型,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python 实现还原已撤回的微信消息

    Python 实现还原已撤回的微信消息

    这篇文章主要介绍了Python 神操作,还原已撤回的微信消息功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • 一文教你解决所有Python中文乱码问题

    一文教你解决所有Python中文乱码问题

    我们在编写代码时总是遇到各种中文乱码的问题,所以本文就来为大家总结一下遇到的中文乱码问题和对应的解决方案,以及为什么会出现中文乱码的问题,希望对大家有所帮助
    2023-12-12
  • Python 利用4行代码实现图片灰度化的项目实践

    Python 利用4行代码实现图片灰度化的项目实践

    灰度处理是将彩色图像转换为灰度图像的过程,即每个像素的颜色由红、绿、蓝三个通道的值组成,转换为一个单一的灰度值,本文主要介绍了Python 利用4行代码实现图片灰度化的项目实践,感兴趣的可以了解一下
    2024-04-04
  • Go/Python/Erlang编程语言对比分析及示例代码

    Go/Python/Erlang编程语言对比分析及示例代码

    这篇文章主要介绍了Go/Python/Erlang编程语言对比分析及示例代码,本文重点是给大家介绍go语言,从语言对比分析的角度切入介绍,需要的朋友可以参考下
    2018-04-04
  • Python django框架开发发布会签到系统(web开发)

    Python django框架开发发布会签到系统(web开发)

    这篇文章主要介绍了Python django框架开发发布会签到系统(web开发),本文通过实例代码效果展示截图的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Keras 加载已经训练好的模型进行预测操作

    Keras 加载已经训练好的模型进行预测操作

    这篇文章主要介绍了Keras 加载已经训练好的模型进行预测操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python实现将PDF转DOCX的超简单教程(附源码)

    Python实现将PDF转DOCX的超简单教程(附源码)

    在日常工作中,我们经常需要将 PDF 文件转换为 Word(.docx) 方便编辑,本文主要介绍了如何Python如何使用pdf2docx实现这一功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-12-12
  • Python的requests网络编程包使用教程

    Python的requests网络编程包使用教程

    requests包为Python扩展了各种基于HTTP的网络数据操作功能,包括各种请求与session和cookie等的追加,very强大,下面我们就来看一下Python的requests网络编程包使用教程
    2016-07-07

最新评论