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的奇妙世界续写更多美妙篇章吧!💫📄✨

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

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

相关文章

C++基础入门(二)(函数重载,引用,内联函数,nullptr)

目录 一. 函数重载 1. 概念 2. 实现 (1). 参数类型不同 (2). 参数个数不同 (3). 参数类型顺序不同 3. 注意事项 (1). 返回值不能作为重载的条件 (2). 不能仅按函数返回类型重载 (3). 与缺省参数的问题 二. 引用 1. 概念和定义 2. 引用的特性 (1). 引用在定义时必须…

【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task

You Only Look at Once for Real-Time and Generic Multi-Task 论文链接:http://arxiv.org/abs/2310.01641 代码链接:https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…

HTML5实现好看的天气预报网站源码

文章目录 1.设计来源1.1 获取天气接口1.2 PC端页面设计1.3 手机端页面设计 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4…

深入理解PHP基础【代码审计实战指南】

文章目录 基础语法单双引号的区别前后端分离数据类型PHP常量函数var_dump函数count函数print_r函数**readfile()函数****file_get_contents()函数****file_put_contents()函数**header函数fopen函数fread 函数rename函数copy()函数…

【Android】视图与常用控件总结

文章目录 一、视图基础1.1 设置视图的宽高1.2 设置视图的间距1.3 设置视图的对齐方式1.4 总结 二、控件2.1 TextView2.1.1 设置宽高2.1.2 设置内容2.1.3 设置大小2.1.4 设置颜色 2.2 Button2.3 EditText2.4 ImageView2.5 ProgressBar2.6 AlertDialog2.7 ProgressDialog 本文主要…

EVM-MLIR:以MLIR编写的EVM

1. 引言 EVM_MLIR: 以MLIR编写的EVM。 开源代码实现见: https://github.com/lambdaclass/evm_mlir(Rust) 为使用MLIR和LLVM,将EVM-bytecode,转换为,machine-bytecode。LambdaClass团队在2周…

RICHTEK立锜科技 WIFI 7电源参考设计

什么是WIFI 7? WiFi 7(Wi-Fi 7)是下一代Wi-Fi标准,对应的是IEEE 802.11将发布新的修订标准IEEE 802.11be –极高吞吐量EHT(Extremely High Throughput )。Wi-Fi 7是在Wi-Fi 6的基础上引入了320MHz带宽、4096-QAM、Mu…

手动构建线性回归(PyTorch)

import torch from sklearn.datasets import make_regression import matplotlib.pyplot as plt import random #1.构建数据 #构建数据集 def create_dataset():x,y,coefmake_regression(n_samples100,n_features1,random_state0,noise10,coefTrue,bias14.5)#将构建数据转换为张…

H3CNE(计算机网络的概述)

1. 计算机网络的概述 1.1 计算机网络的三大基本功能 1. 资源共享 2. 分布式处理与负载均衡 3. 综合信息服务 1.2 计算机网络的三大基本类型 1.3 网络拓扑 定义: 网络设备连接排列的方式 网络拓扑的类型: 总线型拓扑: 所有的设备共享一…

# Redis 入门到精通(九)-- 主从复制(1)

Redis 入门到精通(九)-- 主从复制(1) 一、redis 主从复制 – 主从复制简介 1、互联网“三高”架构 高并发高性能高可用 2、你的“Redis”是否高可用? 1)单机 redis 的风险与问题 问题1.机器故障  现…

代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营 Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串 目录 代码随想录算法训练营前言LeetCode151.翻转字符串里的单词卡码网:55.右旋转字符串 一、LeetCode151.翻转字符串里的单词1.题目链…

[Cesium for Supermap] 加载3dTiles,点击获取属性

代码: // 设为椭球var obj [6378137.0, 6378137.0, 6356752.3142451793];Cesium.Ellipsoid.WGS84 Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));var viewer new Cesium.Viewer(cesiumContainer);var scene viewer.scenescene.lightSource.ambi…

python 打包

#导出依赖文件列表 pip freeze > requirements.txt #安装对应文件 pip install -r requirements.txt #将依赖打成对应whl文件 pip wheel --wheel-dir ./dist -r ./requirements.txt #安装whl文件 pip install …whl

个人简约低调主页,三种主题风格源码

一、源码描述 这是一款简约低调的个人主页源码,提供了数百个精美的动画效果,拥有完美的视觉体验和交互体验,可操作性也达到了巅峰,源码支持三种主题风格,白色、黑色和蓝色渐变,所有这些效果都是通过原生Ja…

怎么压缩视频文件?简单的压缩视频方法分享

视频已成为我们日常生活中不可或缺的一部分。但随着视频质量的提高,文件大小也逐渐成为我们分享的阻碍。如何有效压缩视频文件,使其既能保持清晰,又能轻松分享?今天,给大家分享五种实用的视频压缩方法,快来…

Spring Boot 笔记1(启动类与控制器)

采用Spring Tool Suit 4 java jdk 17 学习启动类与控制器 创建Spring Starter Project 如果https://start.spring.io链接无效,可以选择https://start.aliyun.com 项目结构 启动类 启动类是程序的执行入口 例子1 Demo1Application.java package com.example.dem…

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符,所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…

Django cursor()增删改查和shell环境执行脚本

在Django中,cursor()方法是DatabaseWrapper对象(由django.db.connectio提供)的一个方法,用于创建一个游标对象。这个游标对象可以用来执行SQL命令,从而实现对数据库的增删改查操作。 查询(Select&#xff0…

对象存储解决方案:高性能分布式对象存储系统MinIO

文章目录 引言I 自动化数据管理界面1.1 图形用户界面:GUI1.2 命令行界面:MinIO CLI1.3 应用程序编程接口:MinIO APIII 部署集成2.1 建议使用RPM或DEB安装方式2.2 创建环境变量文件2.3 启动MinIO服务2.4 将NGINX用作反向代理,配置负载。III 基础概念3.1 为什么是对象存储?3…

Python入门------pycharm加载虚拟环境

pycharm虚拟环境配置: 在按照前面的办法,配置好虚拟环境后,如果我们需要到虚拟环境开发,就需要给编译器配置虚拟环境 1.打开编译器,点击右下角的interpreter选项 2. 点击ADD Interpreter,添加虚拟环境 3. 因为我们使用的是原始…