用Python处理PDF:拆分与合并PDF文档

news2025/1/31 10:51:11

PDF文档在信息共享和数据保存方面被广泛使用,处理PDF文档也成为常见需求。其中,合并和拆分PDF文档能够帮助我们更有效地管理PDF文档,使文档内容分布更合理。通过合并,可以将相关文档整合成一个文件,以便更好地组织和提供信息;而通过拆分,可以将大型PDF文件分割成易于管理的较小文件,方便我们更容易地访问所需范围的信息。利用Python,我们可以高效地完成这些任务。本文将介绍如何使用Python来管理PDF文档,包括合并和分割操作的实现方法。

文章目录

    • 使用 MergeFiles() 方法合并PDF文档
    • 通过复制内容合并PDF文档
    • 合并PDF文档的选定页面
    • 将PDF文档拆分为单页文档
    • 按页面范围分割PDF文档

本文所介绍的PDF文档操作方法需要用到Spire.PDF for Python,可从官网下载或通过PyPI(pip install Spire.PDF)安装。

使用 MergeFiles() 方法合并PDF文档

PdfDocument 类代表PDF文档。 在该类中,MergeFiles() 方法可用于直接将多个PDF文档合并为一个文档,方法的参数是文件路径列表。 具体实现过程如下:

  1. 创建PDF文件路径列表。
  2. 使用 PdfDocument.MergeFiles() 方法合并 =PDF 文档。
  3. 使用 PdfDocument.SaveToFile() 方法将合并后的文档保存为新的 PDF 文档。

代码示例:

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

# 创建一个PDF文件路径的列表
inputFile1 = "Sample1.pdf"
inputFile2 = "Sample2.pdf"
inputFile3 = "Sample3.pdf"
files = [inputFile1, inputFile2, inputFile3]

# 合并PDF文档
pdf = PdfDocument.MergeFiles(files)

# 保存结果文档
pdf.Save("output/合并PDF.pdf", FileFormat.PDF)
pdf.Close()

合并效果
合并PDF文档

通过复制内容合并PDF文档

使用 PdfDocument.AppendPage(PdfDocument) 方法,还可以将一个PDF文件中的页面复制到另一个PDF文件中,从而完成PDF文件的合并。 具体步骤如下:

  1. 创建PDF文件路径列表。
  2. 载入每个PDF文档为 PdfDocument 类的对象,并添加到一个列表中。
  3. 创建一个新的 PdfDocument 类的对象。
  4. 循环遍历每个加载的 PDF 文档,使用 PdfDocument.appendPage() 方法将每个PDF文档的页面插入到新的PDF文档中。
  5. 使用 PdfDocument.SaveToFile() 方法保存新的 PDF 文档。

代码示例:

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

# 创建 PDF 文件路径列表
file1 = "Sample1.pdf"
file2 = "Sample2.pdf"
file3 = "Sample3.pdf"
files = [file1, file2, file3]

# 加载每个 PDF 文件为 PdfDocument 对象并添加到列表中
pdfs = []
for file in files:
    pdfs.append(PdfDocument(file))

# 创建一个 PdfDocument 对象
newPdf = PdfDocument()

# 将加载的 PDF 文档的页面插入到新的 PDF 文档中
for pdf in pdfs:
    newPdf.AppendPage(pdf)

# 保存新的 PDF 文档
newPdf.SaveToFile("output/复制页面合并PDF.pdf")
newPdf.Close()

合并效果
通过复制页面合并PDF文档

合并PDF文档的选定页面

我们还可以使用 PdfDocument.InsertPage()PdfDocument.InsertPageRange() 方法从一个PDF文档中选择页面和插入到另一个PDF文档中,从而实现对指定PDF页面的合并。 具体步骤如下:

  1. 创建PDF文件路径列表。
  2. 载入每个PDF文档为 PdfDocument 类的对象,并添加到一个列表中。
  3. 创建一个新的 PdfDocument 类的对象。
  4. 使用 PdfDocument.InsertPage(PdfDocument, pageIndex: int)PdfDocument.InsertPageRange(PdfDocument, startIndex: int, endIndex: int) 方法将已加载文档的指定页面插入到新的PDF文档中。
  5. 使用 PdfDocument.SaveToFile() 方法保存新的PDF文档。

代码示例:

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

# 创建 PDF 文件路径列表
file1 = "Sample1.pdf"
file2 = "Sample2.pdf"
file3 = "Sample3.pdf"
files = [file1, file2, file3]

# 加载每个 PDF 文件为 PdfDocument 对象并添加到列表中
pdfs = []
for file in files:
    pdfs.append(PdfDocument(file))

# 创建一个 PdfDocument 对象
newPdf = PdfDocument()

# 从加载的 PDF 文档中选择指定页插入到新的文档中
newPdf.InsertPage(pdfs[0], 0)
newPdf.InsertPage(pdfs[1], 2)
newPdf.InsertPageRange(pdfs[2], 0, 1)

# 保存新的 PDF 文档
newPdf.SaveToFile("output/选择页面合并PDF.pdf")
newPdf.Close()

合并效果
合并PDF指定页面

将PDF文档拆分为单页文档

PdfDocument.Split(PdfDocument) 方法可用于将多页PDF文档分割成多个单页PDF文件。 具体步骤如下:

  1. 创建一个 PdfDocument 类的对象,并使用 PdfDocument.LoadFromFile() 方法加载PDF文件。
  2. 使用 PdfDocument.Split() 方法将文档分割成多个单页PDF文件。

代码示例:

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

# 创建一个 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文件
doc.LoadFromFile("output/合并PDF.pdf")

# 将 PDF 文件拆分为多个单页的 PDF 文件
doc.Split("Output/PDF/拆分PDF-{0}.pdf", 1)
doc.Close()

拆分效果
将PDF拆分为单页PDF

按页面范围分割PDF文档

要按页面范围将PDF文件分割成两个或多个PDF文件,需要先创建两个或多个新的PDF文件,然后将源PDF中的特定页面或页面范围导入到新创建的PDF文件中。 以下是详细步骤:

  1. 创建一个 PdfDocument 类对象,并使用 PdfDocument.LoadFromFile() 方法加载PDF文件。
  2. 创建另外三个 PdfDocument 对象。
  3. 使用 PdfDocument.InsertPage() 方法从源文件中导入第一页到第一个文档中。
  4. 使用 PdfDocument.InsertPageRange() 方法从源文件中导入第 2-4 页到第二个文档中。
  5. 使用 PdfDocument.InsertPageRange() 方法将源文件中的其余页面导入到第三个文档中。
  6. 使用 PdfDocument.SaveToFile() 方法保存三个文档。

代码示例:

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

# 创建一个 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文件
doc.LoadFromFile("output/合并PDF.pdf")

# 创建三个 PdfDocument 对象
newDoc_1 = PdfDocument()
newDoc_2 = PdfDocument()
newDoc_3 = PdfDocument()

# 将源文件的第一页插入到第一个文档中
newDoc_1.InsertPage(doc, 0)

# 将源文件的第2至4页插入到第二个文档中
newDoc_2.InsertPageRange(doc, 1, 3)

# 将源文件的剩余页插入到第三个文档中
newDoc_3.InsertPageRange(doc, 4, doc.Pages.Count - 1)

# 保存三个文档
newDoc_1.SaveToFile("output/PDF1/自定义拆分PDF-1.pdf")
newDoc_2.SaveToFile("output/PDF1/自定义拆分PDF-2.pdf")
newDoc_3.SaveToFile("output/PDF1/自定义拆分PDF-3.pdf")

# 关闭文档对象
doc.Close()
newDoc_1.Close()
newDoc_2.Close()
newDoc_3.Close()

拆分结果
拆分PDF指定页面

以上文章介绍了如何用Python操作PDF文档,进行PDF文档的合并和拆分。除了简单的合并和拆分外,上述方法还可用于自由操作PDF页面,从而组成新的PDF文档。Spire.PDF for Python 还有许多其他PDF文档操作功能,访问Spire.PDF for Python教程查看更多信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯2019年10月青少组Python程序设计省赛真题

1:有n个人围成一个圈,按顺序排好号然后从第一个人开始报数(从1到3报数),报到3的人退出圈子,然后继续从1到3报数,直到最后留下一个人游戏结束,问最后留下的是原来第几号输人描迹:输人一个正整数n 输出描迹:输出最后留下的是原来的第几号 [样例输人] [样例输出] 2: 3、 […

P1883 函数

题目链接 P1883 函数 思路 举例 题目中的 F ( x ) F(x) F(x) 看起来很复杂,但由于每个 f ( x ) f(x) f(x) 的二次项系数 a a a 都不是负数,故 F ( x ) F(x) F(x) 是一个单谷函数。直接说出结论可能有些令人难以接受,不妨举出两个例子…

mysql忘记了密码

1.查找mysql的配置文件 find / -name my.cnf 2.编辑my.cnf vim /etc/my.cnf 3. 在最后一行添加skip-grant-tables跳过密码校验 4.检查mysql服务是否已正常启动 service mysqld status 5.修改完配置重启服务 systemctl restart msyqld 6.键入 msyql直接进入mysql mysql 7.进入my…

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…

Linux--Shell脚本应用实战

实验环境 随着业务的不断发展&#xff0c;某公司所使用的Linux服务器也越来越多。在系统管理和维护过程中&#xff0c;经 常需要编写一些实用的小脚本&#xff0c;以辅助运维工作&#xff0c;提高工作效率。 需求描述 > 编写一个名为getarp.sh的小脚本&#xff0c;记录局域…

Linux ContOS7 日志管理(rsyslog)

目录 01. rsyslog 记录日志程序 02.日志文件 03.日志等级 Linux 日志文件是记录 Linux 系统运行信息的文件。它们类似于人类的日记&#xff0c;记录了系统的各种活动&#xff0c;如用户登录、进程启动、错误消息等。 Linux 日志文件通常存储在 /var/log/ 目录中。该目录包含…

为实体服务器配置Ubuntu

简介 我们在使用虚拟机时&#xff0c;直接在网上找到镜像然后下载到本地&#xff0c;在VMware创建实例时将该iso文件作为镜像源然后进行基础配置就可以轻松安装配置好Linux虚拟机。 在为实体服务器安装Linux系统&#xff0c;同样的&#xff0c;我们也需要镜像源&#xff08;即…

【Qt之Quick模块】5. QML基本类型及示例用法

QML格式 QML基本类型 在 QML 中&#xff0c;有以下基本类型&#xff1a; int&#xff1a;整数类型。 Rectangle {function myFunction() {// 输出 debug 信息console.log("11 " (11));}Component.onCompleted: {myFunction();} }结果&#xff1a; 2. real&…

hiveserver负载均衡配置

一.安装nginx 参数我的另一篇文章&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/135152478 二.配置nginx服务参数 worker_processes 1; events { worker_connections 1024; } stream { upstream hiveserver2 { # least_conn; # 使用最少连接路由…

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖&#xff0c;适合作为竞…

web架构师编辑器内容-改进字体下拉菜单

前面说到我们可以通过面板配置来更新画布上面的一些属性&#xff0c;如果我们有这样一个需求&#xff1a;在右侧面板配置里面需要查看字体的样式效果我们应该怎么做呢&#xff1f; 我们一开始字体的渲染&#xff1a; const fontFamilyArr [{value: "SimSun","…

性能优化之资源优化

性能优化之资源优化 资源优化性能关键检测流程。浅析一下基于Unity3D 美术规则约束一、模型层面二、贴图层面三、动画层面四、声音层面&#xff1a;&#xff08;音频通用设置&#xff09;五、UI层面&#xff1a; 题外点&#xff1a;诚然在优化中&#xff0c;美术占比是很重要的…

Python量化投资——金融数据最佳实践: 使用qteasy+tushare搭建本地金融数据仓库并定期批量更新【附源码】

用qteasytushare实现金融数据本地化存储及访问 目的什么是qteasy什么是tushare为什么要本地化使用qteasy创建本地数据仓库qteasy支持的几种本地化仓库类型配置本地数据仓库配置tushare 的API token 配置本地数据源 —— 用MySQL数据库作为本地数据源下载金融历史数据 数据的定期…

Springboot+vue的装饰工程管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的装饰工程管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的装饰工程管理系统&#xff0c;采用M&#xff08…

大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

python打开opencv图像与QImage图像及其转化

目录 1、Qimage图像 2、opencv图像 3、python打开QImage图像通过Qlabel控件显示 4、python打开QImage图像通过opencv显示 5、python打开opencv图像并显示 6、python打开opencv图像通过Qlabel控件显示 1、Qimage图像 QImage是Qt库中用于存储和处理图像的类。它可以存储多种…

十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>

文章目录 1. 前言2. 平台操作流程3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发…

【Linux系统编程二十二】:(信号1)--信号的产生与发送

【Linux系统编程二十二】&#xff1a;信号的产生与发送 一.理解特性二.信号的产生1.键盘组合键①.前台进程②.硬件中断 2.异常的本质①软件异常 3.异步的 三.信号的发送 一.理解特性 第一&#xff0c;我们能够识别这个信号。我们能知道这个信号是什么。 第二&#xff0c;我们能…

2023亚马逊云科技re:Invent用Amazon Q打造你的知识库

随着ChatGPT的问世&#xff0c;我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会re:Invent也带来了许多前言的技术&#xff0c;其中亚马逊云科技CEO Adam Selipsky在2023亚马逊云科技re:Invent大会中重磅推出Amazon Q&#xff0c;这预示着生成式AI的又一个里程碑。…

.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"Microsoft.IdentityModel.Tokens" Version"7.0.3" /><P…