当前位置: 首页 > 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的奇妙世界续写更多美妙篇章吧!💫📄✨

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • windows server——5.DNS管理器域名解析搭建网站
  • 快速创建 vue 项目并添加 Dockerfile 文件
  • 手动构建线性回归(PyTorch)
  • 如何搭建一个RADIUS服务器?
  • vue3封装el-table及实现表头自定义筛选
  • CSP-J模拟赛day1
  • 【计算机网络】0 课程主要内容(自顶向下方法,中科大郑烇、杨坚)(待)
  • Flutter 开源库学习
  • 【Linux】shell简单模拟实现
  • Adobe Premiere Pro(Pr)安装包软件下载
  • 2024年热门硬盘数据恢复软件大盘点:高效恢复您的宝贵数据
  • 【数据结构】二叉树OJ题_对称二叉树_另一棵的子树
  • NAS新品“翻车”后,绿联科技要上市了
  • Chapter 5: 二叉树详解
  • docker默认存储地址 var/lib/docker 满了,换个存储地址操作流程
  • @jsonView过滤属性
  • Android 控件背景颜色处理
  • CSS中外联样式表代表的含义
  • js正则,这点儿就够用了
  • Redis 中的布隆过滤器
  • spring-boot List转Page
  • Spring-boot 启动时碰到的错误
  • tab.js分享及浏览器兼容性问题汇总
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 聊聊directory traversal attack
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 排序算法学习笔记
  • 前端代码风格自动化系列(二)之Commitlint
  • 使用API自动生成工具优化前端工作流
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 正则表达式-基础知识Review
  • ​第20课 在Android Native开发中加入新的C++类
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define 用法
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1)SpringCloud 整合Python
  • (C++)八皇后问题
  • (pojstep1.1.2)2654(直叙式模拟)
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)斐波那契Fabonacci函数
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (六)DockerCompose安装与配置
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Linux下编译安装log4cxx
  • (转)Scala的“=”符号简介
  • (转)visual stdio 书签功能介绍
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .apk文件,IIS不支持下载解决
  • .bat批处理(一):@echo off
  • .chm格式文件如何阅读
  • .form文件_一篇文章学会文件上传
  • .jks文件(JAVA KeyStore)