当前位置: 首页 > 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. 空间复杂度 桶排序的特点 三. 基数排序 概念 步…...

淘金币自动化脚本:每天6分钟搞定淘宝全任务,彻底解放你的双手

淘金币自动化脚本:每天6分钟搞定淘宝全任务,彻底解放你的双手 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/…...

基于Rust与智能体范式构建生产级AI工作流:从Dust平台实践到避坑指南

1. 从零到一:理解Dust平台的核心价值与设计哲学如果你和我一样,每天都在和代码、文档、数据打交道,那你肯定也经历过这样的时刻:为了一个简单的数据查询,需要在不同工具间反复切换;为了写一份周报&#xff…...

字节投2000亿、DeepSeek募500亿:国产AI算力军备竞赛进入“核弹级“对决

一、一条被低估的新闻2026年5月,当大多数人还在关注GPT-5.5的幻觉率降了多少个百分点时,中国AI产业发生了一件更具战略意义的大事——字节跳动宣布2026年AI基础设施资本支出超2000亿元,几乎同时,DeepSeek传出拟募资最高500亿元&am…...

京城汤泉夜宿体验:寻找最舒适的放松之地

引言在快节奏的城市生活中,越来越多的人开始追求一种能够彻底放松身心的方式。洗浴汤泉作为其中的一种选择,以其独特的魅力吸引了众多都市人。本文将带您走进京城的洗浴汤泉世界,特别介绍合韵汤泉,帮助您找到最适合自己的放松之地…...

在多轮对话应用中体验Taotoken路由策略对响应速度的优化

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多轮对话应用中体验Taotoken路由策略对响应速度的优化 1. 场景与背景 在开发一个需要多轮交互的对话应用时,我们常常…...

3PEAK思瑞浦 TPA2644-SO2R-S SOP14 运算放大器

特性 供电电压:3V至36V 偏移电压:3mV(最大值)差分输入电压范围至电源轨,可作为比较器工作 带宽:1.5MHz,斜率:0.5V/us输入轨至-Vs,无内部ESD二极管至Vs 低1/f噪声:在10Hz时为50nV/Hz 高PSRR:100kHz时60dB 开机和关机电流期间无明显输出抖动 工…...

全网没人敢说,关于中小企业AI营销一体机到底是卖硬件还是卖落地闭环的屎盆子,我先扣为敬。

[实话] 干这行十年,我拍着桌子定过一条死规矩。三个不做:不做只卖盒子不管结果的,不做签完合同就消失的,不做让你自己研究三个月才能用的。[实话] 现在的“AI营销一体机”,90%都是在收智商税。我见过太多老板&#xff…...

如何用DdddOcr在3分钟内构建离线验证码识别系统

如何用DdddOcr在3分钟内构建离线验证码识别系统 【免费下载链接】ddddocr 带带弟弟 通用验证码识别OCR pypi版 项目地址: https://gitcode.com/gh_mirrors/dd/ddddocr 在当今的自动化测试、数据采集和网络安全领域,验证码识别是绕不开的技术难题。传统的在线…...

STM32实战:用HAL库搞定RS485 Modbus液压传感器数据采集(附自动收发电路避坑)

STM32实战:HAL库驱动RS485 Modbus液压传感器全流程解析 液压系统压力监测的稳定性往往取决于传感器数据采集的可靠性。在工业现场,RS485总线搭配Modbus RTU协议已成为液压传感器数据传输的黄金标准。本文将深入探讨基于STM32 HAL库的完整解决方案&#x…...

别再手动造数据了!用Python的imgaug库5分钟搞定深度学习图像增强(附关键点/边界框处理避坑指南)

深度学习图像增强实战:用imgaug打造高效数据流水线 在计算机视觉项目中,数据增强是提升模型泛化能力的关键步骤。传统手动处理方式不仅耗时耗力,还难以保证处理一致性。本文将深入探讨如何利用Python的imgaug库快速构建自动化图像增强流程&am…...