当前位置: 首页 > news >正文

Python PDF Magic:合并和拆分随心所欲

大家好!小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体,还是将一个庞大的PDF文件拆分成多个小伙伴,都轻松hold住!你准备好了吗?让我们开始这场奇妙的PDF操作之旅吧!

准备工作

 因为操作PDF,需要用到Python的一个重要的库:PyPDF2。所以还没安装PyPDF2库的,我们先通过pip安装一下吧:

pip install PyPDF2

1、合并PDF - 让PDF们手牵手

from PyPDF2 import PdfWriter
from pathlib import Pathdef merge_pdfs(src_folder_path, merged_file_path):src_folder = Path(src_folder_path)merged_file = Path(merged_file_path)merger = PdfWriter()for pdf in src_folder.glob("*.pdf"):merger.append(pdf)merger.write(merged_file)merger.close()# 示例用法
merge_pdfs("C:/Users/olive/Desktop/待合并的PDF","C:/Users/olive/Desktop/待合并的PDF/merged.pdf")

代码解析:

1.from PyPDF2 import PdfWriter:导入PyPDF2库中的PdfWriter,它提供了用于创建新PDF文件的功能。

2.from pathlib import Path:导入Python中的pathlib库中的Path,用于处理文件路径。

3.def merge_pdfs(src_folder_path,merged_file_path)::定义了一个函数merge_pdfs,该函数接受两个参数:src_folder_path(指定的文件夹路径,包含待合并的PDF文件)和merged_file_path(合并后的PDF文件的保存路径)。

4.src_folder = Path(src_folder_path):将src_folder_path转换为Path对象,以便后续处理文件夹。

5.merged_file = Path(merged_file_path):将merged_file_path转换为Path对象,以便后续保存合并后的PDF文件路径。

6.merger = PdfWriter():创建一个PdfWriter对象,用于写入PDF文件。

7.for pdf in src_folder.glob("*.pdf")::遍历src_folder文件夹中所有的PDF文件(以".pdf"结尾的文件)。

8.merger.append(pdf):将遍历到的每个PDF文件添加到合并器(merger)中。

9.merger.write(merged_file):将合并后的PDF文件保存到指定的路径(merged_file)。

10.merger.close():关闭合并器,完成文件合并操作。

11.# 示例用法...:提供了一个示例用法,调用了merge_pdfs函数,并传入了文件夹路径和合并后的PDF文件保存路径。

2、拆分PDF - 让每页都成主角

from PyPDF2 import PdfReader, PdfWriter
from pathlib import Pathdef split_pdf(input_file_path, output_folder, step=1):input_file = Path(input_file_path)output_folder = Path(output_folder)pdf_reader = PdfReader(input_file)for page_num in range(0, len(pdf_reader.pages), step):pdf_writer = PdfWriter()for page in pdf_reader.pages[page_num:page_num + step]:pdf_writer.add_page(page)output_filename = f"第{int(page_num / step) + 1}章.pdf"pdf_writer.write(output_folder / output_filename)# 示例用法
split_pdf('C:/Users/olive/Desktop/待拆分的PDF/large_file.pdf','C:/Users/olive/Desktop/待拆分的PDF', 2)

代码解析:

1.from PyPDF2 import PdfReader,PdfWriter:导入PyPDF2库中的PdfReader和PdfWriter,分别用于读取PDF文件和创建新的PDF文件。

2.from pathlib import Path:导入Python中的pathlib库中的Path,用于处理文件路径。

3.def split_pdf(input_file_path,output_folder,step=1)::定义了一个函数split_pdf,该函数接受三个参数:input_file_path(要拆分的PDF文件路径)、output_folder(拆分后的PDF文件保存的文件夹路径)、step(可选参数,默认值为1,指定每个拆分后的文件包含的页面数量)。

4.input_file = Path(input_file_path):将input_file_path转换为Path对象,以便后续处理PDF文件。

5.output_folder = Path(output_folder):将output_folder转换为Path对象,以便后续保存拆分后的PDF文件路径。

6.pdf_reader = PdfReader(input_file):创建一个PdfReader对象,用于读取输入的PDF文件。

7.for page_num in range(0,len(pdf_reader.pages),step)::循环遍历PDF文件中的每一个页面,步长为step

8.pdf_writer = PdfWriter():创建一个PdfWriter对象,用于创建新的PDF文件。

9.for page in pdf_reader.pages[page_num:page_num + step]::遍历PDF文件的每个页面,并依次添加到pdf_writer中。

10.output_filename = f"第{int(page_num / step) + 1}章.pdf":根据拆分后的序号生成输出文件名。

11.pdf_writer.write(output_folder / output_filename):将拆分后的页面保存到指定的输出文件夹中,并使用生成的文件名。

12.# 示例用法...:提供了一个示例用法,调用了split_pdf函数,并传入了大型PDF文件的路径、输出文件夹的路径以及步长参数。

激动人心的测试

1、合并PDF文件

我们先准备几个PDF文档,记得给文档先编个号哦,不然合并的时候,顺序可能会乱掉:

然后,待最后一行的测试代码改一下,改成你自己的文件夹路径:

# 示例用法
merge_pdfs("C:/Users/olive/Desktop/待合并的PDF","C:/Users/olive/Desktop/待合并的PDF/merged.pdf")

最后,运行代码,我们来检验一下成果吧:

OK,我们看到merged.pdf文件出来了,大家可以打开该文件自行检验一下合并的效果。

2、拆分PDF文件

我们可以把刚才合并好的PDF再做一下拆分,顺便重新命个名吧:

然后,记得改一下测试代码哦,改成你自己的路径,这次我们想两页两页地拆分:

# 示例用法
split_pdf('C:/Users/olive/Desktop/待拆分的PDF/large_file.pdf','C:/Users/olive/Desktop/待拆分的PDF', 2)

运行代码,检验一下成果吧:

嘿嘿,是不是感觉有了点魔法般的妙手回春?让Python为你打开了PDF操作的新世界!快来试试吧,相信你一定也能成为这场奇妙冒险故事中的主角!

希望这些代码能带给你一些灵感和乐趣!如果你对PDF操作还有其他想法,或者是“突如其来”的妙点子,也欢迎分享给我哦!让我们一起为PDF的奇妙世界续写更多美妙篇章吧!💫📄✨

相关文章:

Python PDF Magic:合并和拆分随心所欲

大家好!小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体,还是将一个庞大的PDF文件拆分成多个小伙伴,都轻松hold住!你准备好了吗?让我们开始这场奇妙的PDF操作之旅吧! 准…...

Gmsh应用程序编程接口

Gmsh应用程序编程接口(API)允许将Gmsh库集成到使用C、C、Python、Julia或Fortran编写的外部应用程序中。从设计上讲,Gmsh API是纯粹功能性的,并且仅使用目标语言的基本类型。 API的结构反映了底层的Gmsh数据模型(也请参…...

DP 203 学习笔记

考试内容总览 Learning Objects: 工具 Designing and implementing data storage 1. Storage Azure Synapse Analytics Azure Databricks Azure Data Lake Storage Gen2(ADLS2,可代替Hadoop Distributed File System也就是HDFS) 2. Shard Partition data store …...

SQLite 事务

SQLite 事务 SQLite 是一种轻量级的数据库管理系统,广泛用于各种应用程序中,特别是在移动设备和嵌入式系统中。它支持标准的 SQL 语法,包括事务处理。事务是数据库管理系统中的一个重要概念,它允许将一系列操作作为一个单独的工作单元来处理,以确保数据库的一致性和可靠性…...

LabVIEW和Alicat Scientific质量流量计实现精确流量控制

在现代工业自动化和科研实验中,精确的气体流量控制至关重要。这里将介绍一个使用LabVIEW与Alicat Scientific公司的质量流量计实现流量控制的项目。项目采用Alicat Scientific的质量流量计(型号:M-200SCCM-D),通过LabV…...

2024-07-19 Unity插件 Odin Inspector10 —— Misc Attributes

文章目录 1 说明2 其他特性2.1 CustomContextMenu2.2 DisableContextMenu2.3 DrawWithUnity2.4 HideDuplicateReferenceBox2.5 Indent2.6 InfoBox2.7 InlineProperty2.8 LabelText2.9 LabelWidth2.10 OnCollectionChanged2.11 OnInspectorDispose2.12 OnInspectorGUI2.13 OnIns…...

Go操作Redis详解

文章目录 Go操作Redis详解来源介绍Redis支持的数据结构Redis应用场景Redis与Memcached比较准备Redis环境go-redis库 安装连接普通连接连接Redis哨兵模式连接Redis集群基本使用set/get示例zset示例Pipeline事务WatchGo操作Redis详解 来源 https://www.liwenzhou.com/posts/Go/…...

钡铼Modbus TCP耦合器BL200实现现场设备与SCADA无缝对接

前言 深圳钡铼技术推出的Modbus TCP耦合器为SCADA系统与现场设备之间的连接提供了强大而灵活的解决方案,它不仅简化了设备接入的过程,还提升了数据传输的效率和可靠性,是工业自动化项目中不可或缺的关键设备。本文将从Modbus TC、SCADA的简要…...

数据分析入门:用Python和Numpy探索音乐流行趋势

一、引言 音乐是文化的重要组成部分,而音乐流行趋势则反映了社会文化的变迁和人们审美的变化。通过分析音乐榜单,我们可以了解哪些歌曲或歌手正在受到大众的欢迎,甚至预测未来的流行趋势。Python作为一种强大的编程语言,结合其丰…...

数仓工具—Hive语法之替换函数和示例

Hive 替换函数和示例 默认情况下,并没有可用的 Hive 替换函数。如果在处理字符串时需要替换特定值,例如垃圾值,字符串操作函数替换是非常需要的。在本文中,我们将检查 Hive 替换函数 的替代方法,以便在需要时使用。 如前所述,Apache Hive 不提供替换函数的支持。但是,…...

[SUCTF 2019]EasySQL1

这是一个简单的SQL注入题,但是因为我的SQL基础约等于0,所以做起来很难。 首先试试引号是否被过滤 可以看到单引号、双引号都被过滤了,试试其他的盲注都不行,基本上可以确定不能用这种方法。 在测试的过程中发现,输入…...

elasticsearch, kibana, 6.8.18 版本下的创建索引,指定timestamp,java CRUD,maven版本等

ELK 这一套的版本更迭很快, 而且es常有不兼容的东西出现, 经常是搜一篇文章,看似能用,拿到我这边就不能用了。 很是烦恼。 我这边的ELK版本目前是 6.8.18,这次的操作记录一下。 (涉密内容略有删改&#xf…...

无人机侦察:二维机扫雷达探测设备技术详解

二维机扫雷达探测设备采用机械扫描方式,通过天线在水平方向和垂直方向上的转动,实现对目标空域的全方位扫描。雷达发射机发射电磁波信号,遇到目标后产生反射,反射信号被雷达接收机接收并处理,进而得到目标的位置、速度…...

未来互联网的新篇章:深度解析Web3技术

随着技术的飞速发展,Web3作为新一代互联网技术范式,正在重新定义我们对互联网的认知和使用方式。本文将深入探讨Web3技术的核心概念、关键特征以及其在未来互联网发展中的潜力和影响,为读者打开Web3时代的大门。 Web3技术的核心概念和特征 1…...

vst 算法R语言手工实现 | Seurat4 筛选高变基因的算法

1. vst算法描述 (1)为什么需要矫正 image source: https://ouyanglab.com/singlecell/basic.html In this panel, we observe that there is a very strong positive relationship between a gene’s average expression and its observed variance. I…...

阿里通义千问大模型Qwen2-72B-Instruct通用能力登顶国内第一!

前言: 中国互联网协会副秘书长裴玮近日在2024中国互联网大会上发布《中国互联网发展报告(2024)》。《报告》指出, 在人工智能领域,2023年我国人工智能产业应用进程持续推进,核心产业规模达到5784亿元。 截至2024年3月&#xff…...

CH04_依赖项属性

第4章:依赖项属性 本章目标 理解依赖项属性理解属性验证 依赖项属性 ​ 属性与事件是.NET抽象模型的核心部分。WPF使用了更高级的依赖项属性(Dependency Property)功能来替换原来.NET的属性,实现了更高效率的保存机制&#xf…...

CentOS 7开启SSH连接

1. 安装openssh-server 1.1 检查是否安装openssh-server服务 yum list installed | grep openssh-server如果有显示内容,则已安装跳过安装步骤,否则进行第2步 1.2 安装openssh-server yum install openssh-server2. 开启SSH 22监听端口 2.1 打开ssh…...

代理伺服器分類詳解

代理伺服器的主要分類 代理伺服器可以根據不同的標準進行分類。以下是幾種常見的分類方式: 按協議分類按匿名性分類按使用場景分類 1. 按協議分類 根據支持的協議類型,代理伺服器可以分為以下幾類: HTTP代理:專門用於處理HTT…...

计数,桶与基数排序

目录 一. 计数排序 概念 步骤思路如下 实现代码如下 时间复杂度与空间复杂度 1. 时间复杂度 2. 空间复杂度 计数排序的特点 二. 桶排序 概念 步骤思路如下 实现代码如下 时间复杂度与空间复杂度 1. 时间复杂度 2. 空间复杂度 桶排序的特点 三. 基数排序 概念 步…...

如何选择可靠的第三方软件测试机构,构建全生命周期的软件安全防线

在数字化转型的浪潮中,软件已成为企业运营的核心。然而,伴随其重要性一同增长的,是日益严峻的安全威胁。传统软件开发流程中,安全测试往往被置于交付前的独立环节,这种“事后补丁”的模式导致安全漏洞发现晚、修复成本…...

ArcGIS Desktop绘图工具条实战:从基础图形到专业地图注记的进阶指南

1. ArcGIS绘图工具条初探:你的地图设计起点 第一次打开ArcGIS Desktop的绘图工具条时,我就像拿到了一盒全新的彩色铅笔。这个看似简单的工具条,实际上包含了从基础绘图到专业地图注记的全套功能。绘图工具条位于软件界面顶部,右键…...

解锁TikTok电商API:PHP开发者的零门槛接入方案

解锁TikTok电商API:PHP开发者的零门槛接入方案 【免费下载链接】tiktokshop-php Unofficial Tiktok Shop API Client in PHP. Use API version 202309 and later 项目地址: https://gitcode.com/gh_mirrors/ti/tiktokshop-php 跨境电商API对接新选择&#xf…...

3天快速掌握RCWA光学仿真:从零到一的完整高效指南

3天快速掌握RCWA光学仿真:从零到一的完整高效指南 【免费下载链接】Rigorous-Coupled-Wave-Analysis modules for semi-analytic fourier series solutions for Maxwells equations. Includes transfer-matrix-method, plane-wave-expansion-method, and rigorous c…...

Qt串口通信实战:用QSerialPort从零搭建一个串口调试助手(附完整源码)

Qt串口通信实战:从零构建工业级调试助手 在嵌入式开发和工业控制领域,串口通信作为最基础也最可靠的通信方式之一,至今仍发挥着不可替代的作用。无论是单片机与上位机的数据交换,还是工业设备的参数配置,一个稳定高效的…...

Delphi 终极实战:将自定义控件打包成 BPL,安装到 Delphi 工具栏(组件库实战)

前面我们手写了专属 UI 组件库(MyUIClass.pas),但如果你想在以后的项目中一键调用这些控件,而不是每次都复制粘贴代码,那就必须将它们打包成 Delphi 组件包(BPL 文件)。学会这篇,你将…...

SRAM vs ReRAM vs Flash:一张表看懂不同存内计算芯片的优缺点与选型指南

SRAM vs ReRAM vs Flash:存内计算芯片技术选型全景指南 在AI算力需求爆炸式增长的今天,传统冯诺依曼架构的"内存墙"瓶颈日益凸显。存内计算技术通过将计算单元嵌入存储阵列,彻底打破了数据搬运的能耗桎梏。根据最新行业报告&#x…...

Pandoc:5步掌握全能文档转换的极简工作流

Pandoc:5步掌握全能文档转换的极简工作流 【免费下载链接】pandoc Universal markup converter 项目地址: https://gitcode.com/gh_mirrors/pa/pandoc 价值定位:为什么每个开发者都需要一款"格式翻译官" 当你需要将Markdown笔记转换为…...

PT-Plugin-Plus:PT站点下载助手安装与使用指南

PT-Plugin-Plus:PT站点下载助手安装与使用指南 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主要用于辅助下载 PT 站的种子。 项目地址: h…...

Mermaid在线编辑器完整指南:3步制作专业图表零基础入门

Mermaid在线编辑器完整指南:3步制作专业图表零基础入门 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-edito…...