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

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.hqwc.cn/news/294804.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于python的excel检查和读写软件

软件版本:python3.6 窗口和界面gui代码: class mygui:def _init_(self):passdef run(self):root Tkinter.Tk()root.title(ExcelRun)max_w, max_h root.maxsize()root.geometry(f500x500{int((max_w - 500) / 2)}{int((max_h - 300) / 2)}) # 居中显示…

IPC之九:使用UNIX Domain Socket进行进程间通信的实例

socket 编程是一种用于网络通信的编程方式,在 socket 的协议族中除了常用的 AF_INET、AF_RAW、AF_NETLINK等以外,还有一个专门用于 IPC 的协议族 AF_UNIX,IPC 是 Linux 编程中一个重要的概念,常用的 IPC 方式有管道、消息队列、共…

多相机系统通用视觉 SLAM 框架的设计与评估

Design and Evaluation of a Generic Visual SLAM Framework for Multi-Camera Systems PDF https://arxiv.org/abs/2210.07315 Code https://github.com/neufieldrobotics/MultiCamSLAM Data https://tinyurl.com/mwfkrj8k 程序设置 主要目标是开发一个与摄像头系统配置无关…

抖店只能用官方电子面单?2024抖店玩法解读,附面单使用教程

我是王路飞。 正在做抖店的商家,应该都发现一件事情了,那就是现在的抖店好像不让拍单了,只能使用抖音的电子面单,打单发货。 说实话,这种情况已经出现过太多次了,导致很多商家不以为然。 我曾经也说过&a…

蓝牙键盘怎么连接电脑?正确操作步骤分享!

“由于我经常需要用到电脑,为了方便,我新买了一个蓝牙键盘,但是我不知道应该如何把这个蓝牙键盘连接上电脑,有没有朋友可以分享方法呀?” 在数字化时代,蓝牙设备已经成为了我们生活中不可或缺的一部分。其中…

vue微乾坤子应用开发及ele组件开发时问题记录

一. 微乾坤 1. 新增page页面路由,pmi权限中心配置正常,跳转链接正确,但路由未找到403. 解决: 新增的配置是page类型,transformQianKunRoute方法转换微前端路由数据 时,过滤未兼容page型的路由, 解决 [menu,…

如何有效恢复 Android 上已删除的短信/短信

“ 我昨天不小心删除了小米中的一些重要短信,如何快速恢复它们?我急需他们,请帮帮我!” 峰峰在 Android 论坛中提出的问题。 随着时代的变迁,人们的通讯方式也发生了很大的变化,各种即时通讯软件纷纷涌现…

R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

散点图可以直观反映数据的分布,箱线图可以展示均值等关键统计量,二者结合能够清晰呈现数据蕴含的信息。 本篇笔记主要内容:介绍R语言中绘制箱线图和散点图的方法,以及二者结合展示教程,添加差异比较显著性分析&#xf…

Shell编程自动化之特殊Shell扩展变量

1.变量的处理 1.1 如果parameter变量值为空,那么返回str字符串。 ${parameter:-str} 1.2 如果parameter变量值为空,那么str替代变量值,且返回其值。 ${parameter:str} 1.3 如果parameter变量值为空,那么str当作stderr输出&am…

随机问卷调查数据的处理(uniapp)

需求:问卷调查 1.返回的数据中包含单选、多选、多项文本框、单文本框、图片上传 2.需要对必填的选项进行校验 3.非必填的多项文本框内容 如果不填写 不提交 表单数据格式 res{"code": 0,"msg": null,"data": [{"executeDay&…

【HarmonyOS开发】ArkTs使用Http封装

1、鸿蒙中如何进行网络请求 1.1 三方库请求 ohos/axios ohos/retrofit ohos/httpclient 1.2 鸿蒙原生请求 ohos.net.http 2、ArkTs请求模块ohos.net.http 本模块提供HTTP数据请求能力。应用可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD…

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者:yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务,您可以在发布服务时直接勾选ArcGIS REST地图服务,如下图所示: 也可以在已发布的地图服务中&#x…