用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教程查看更多信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入了解C编译管道

文章目录 引言1. 预处理阶段2. 编译阶段3. 汇编阶段4. 链接阶段5.流程图结论 引言 C编译管道是软件开发中至关重要的工具,它负责将C语言源代码转换为可执行的机器代码。理解C编译管道的工作原理有助于提高代码的可读性、可维护性,并有助于优化生成的可执…

20231222给NanoPC-T4(RK3399)开发板的适配原厂Android10的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配原厂Android10的挖掘机方案并跑通AP6398SV 1、简略步骤:rootrootrootroot-X99-Turbo:~/3TB/3399-android10$ cat Rockchip_Android10.0_SDK_Release.tar.gz0* > Rockchip_Android10.0_SDK_Release.tar.gz rootrootrootro…

SUSE Linux服务器使用zypper安装nginx

SUSE Linux 的云服务器用户,不能yum,安装软件,可通过 zypper 快速安装软件。 使用 root 账号登录 openSUSE 操作系统的云服务器。 执行 zypper service-list 或 zypper sl 命令 列出软件源 安装软件包 执行 zypper search 或 zypper se 命令&#…

扫码展示多视频怎么做?视频的活码制作技巧

现在扫码看视频的应用场景越来越多,用这种方式不仅能够简单有效的低成本完成视频传播,而且也符合用户的习惯。那么当需要将视频制作二维码来展示内容时,多个视频文件生成二维码的制作方法是怎么操作的呢?下面教大家使用视频二维码…

运用ETL快速拉取吉客云平台订单信息

吉客云介绍 吉客云是一家中国的云计算服务提供商。它提供了包括云服务器、云数据库、云存储、云网络等各种云计算产品和解决方案,帮助企业和个人搭建高效、可靠、安全的云计算环境。 吉客云特点和优势: 大规模分布式架构:吉客云基于自主研发…

安装nodejs,配置环境变量并将npm设置淘宝镜像源

安装nodejs并将npm设置淘宝镜像源 1. 下载nodejs 个人不喜欢安装包,所以是下载zip包的方式。这里我下载的node 14解压包版本 下载地址如下:https://nodejs.org/dist/v14.15.1/node-v14.15.1-win-x64.zip 想要其他版本的小伙伴去https://nodejs.org/di…

【【迭代16次的CORDIC算法-verilog实现】】

迭代16次的CORDIC算法-verilog实现 -32位迭代16次verilog代码实现 CORDIC.v module cordic32#(parameter DATA_WIDTH 8d32 , // we set data widthparameter PIPELINE 5d16 // Optimize waveform)(input …

opencv入门到精通——改变颜色空间

目录 目标 改变颜色空间 对象追踪 如何找到要追踪的HSV值? 目标 在本教程中,你将学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等 除此之外,我们还将创建一个应用程序,以提取视频中的…

Mapmost Alpha上新啦!新增移动端的丝滑且强大功能!

本文目录 一、Mapmost Alpha 介绍1.1 Maopmost 数字孪生平台1.2 Mapmost 产品能力1.3 Mapmost Alpha 产品优势 二、移动端功能介绍三、Mapmost Alpha 总结 一、Mapmost Alpha 介绍 Hello,各位铁铁,今天给大家推荐一款好用的三维城市场景创建工具。 这款…

k8s部署elastic+kibana

1.软件版本说明 1.1软件版本说明 软件版本kubernetes1.23.17elasticsearch7.17.3kibana7.17.3 1.2硬件环境说明 宿主机使用windows10安装vmware17.5.0,虚拟机安装linux系统(centos7.9) 说明: elasticserch和kibana的版本尽量…

NTFS权限与文件系统:深入解析与实践指南

在当今的信息时代,数据安全和管理成为了每个组织和个人的重要议题。NTFS权限作为Windows操作系统中的一个核心功能,为文件和文件夹的安全管理提供了强大的支持。本文将深入解析NTFS权限的基本概念,并通过实际操作指导如何有效地利用这些权限来…

MySQL的hash索引

MySQL有BTree 索引及Hash索引等索引类型,BTree索引类型是MySQL采用最多的索引类型。Hash索引使用场景比较有限,文章将从Hash索引的底层结构出发,来分析Hash索引的利与弊。 1 hash数据结构 hash数据结构由键、哈希函数及哈希表组成。 键&am…

【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

系列文章目录 题目:Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文:https://arxiv.org/pdf/2304.06714.pdf 任务:无条件3D生成(如从噪音中,生成不同的车等)、…

提前预测刚体移动轨迹 预测运动轨迹

提前预测刚体移动轨迹 预测运动轨迹 一、效果二、介绍三、脚本RigidbodyExtension.cs 计算工具类DrawLine.cs 画线工具类 四、资源分享 一、效果 二、介绍 通过计算Unity物理系统的运动方位来判断下一步移动的位置,主要用于物体运动的提前预测,通常使用…

比 Eslint 快 100 倍!新一代 JS Linter 发布!

比 Eslint 快 100 倍!新一代 JS Linter 发布! Oxc 是用 Rust 编写的 JavaScript 语言的高性能工具集合。他们的目标是构建 JavaScript 的基本编译器工具:解析器、linter、格式化程序、转译器、压缩器和解析器等等,这次他们发布了一…

3.18 Linux 防火墙

1、iptables 概述 a. 概念介绍 自Centos7.X开始,系统自带的防火墙是filewalld,但是也同样支持iptables, 我们仍然可以用iptables来作为防火墙。 netfilter/iptables:IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。 netfilter 组件…

Nginx 安装(源码编译安装)

Nginx服务器提供了Windows和Linux版本,本文为Linux环境下Nginx服务器的详细安装步骤。 安装环境: Linux服务器操作系统:CentOs 8.1.1911 Nginx版本:1.21.4(Linux) 安装步骤: 1、安装GCC、aut…

过度加大SSD内部并发何尝不是一种伤害-part1

之前存储随笔有发布过一篇关于如何通过IO并发度提升性能相关的文章: 扩展阅读:SSD基础架构与NAND IO并发问题探讨 SSD整体优化策略就是要低延迟,高带宽,增加NAND的并发度。 本文,我们从另外一个角度来做一些讨论。现…

MySQL代码笔记

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻表的增删查改创建表格&…

TLC2543(12位A/D转换器)实现将输入的模拟电压显示到数码管上

代码&#xff1a; #include <reg51.h> #define uchar unsigned char #define uint unsigned int// 数码管0-9 unsigned char seg[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; sbit SDO P1^0; sbit SDI P1^1; sbit CS P1^2; sbit CLK P1^3; s…