【Python基础】python使用PyPDF2和pdfplumber操作pdf
1、PyPDF2和pdfplumber库介绍
PyPDF2官网:PyPDF2官网 ,可以更好的读取、写入、分割、合并PDF文件;
pdfplumber官网:pdfplumber官网,可以更好地读取PDF文件内容和提取PDF中的表格;
这两个库不属于python标准库,都需要单独安装;
2、python提取PDF文字内容
1)利用pdfplumber提取文字
import PyPDF2
import pdfplumberwith pdfplumber.open("餐饮企业综合分析.pdf") as p:page = p.pages[2]print(page.extract_text())
结果如下:
2)利用pdfplumber提取表格并写入excel
extract_table():如果一页有一个表格;
extract_tables():如果一页有多个表格;
import PyPDF2
import pdfplumber
from openpyxl import Workbookwith pdfplumber.open("餐饮企业综合分析.pdf") as p:page = p.pages[4]table = page.extract_table()print(table)workbook = Workbook()sheet = workbook.activefor row in table:if not "".join() == ""sheet.append(row)workbook.save(filename = "新pdf.xlsx")
结果如下:缺陷:可以看到,这里提取出来的表格有很多空行,怎么去掉这些空行呢?判断:将列表中每个元素都连接成一个字符串,如果还是一个空字符串那么肯定就是空行。
import PyPDF2
import pdfplumber
from openpyxl import Workbookwith pdfplumber.open("餐饮企业综合分析.pdf") as p:page = p.pages[4]table = page.extract_table()print(table)workbook = Workbook()sheet = workbook.activefor row in table:if not "".join([str(i) for i in row]) == "":sheet.append(row)workbook.save(filename = "新pdf.xlsx")
结果如下:
3、PDF合并及页面的排序和旋转
1)分割及合并pdf
① 合并pdf
首先,我们有如下几个文件,可以发现这里共有三个PDF文件需要我们合并。同时可以发现他们的文件名都是有规律的(如果文件名,没有先后顺序,我们合并起来就没有意义了。)代码如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_writer = PdfFileWriter()
for i in range(1,len(os.listdir(r"G:\6Tipdm\7python办公自动化\concat_pdf"))+1):print(i*50+1,(i+1)*50)pdf_reader = PdfFileReader("G:\\6Tipdm\\7python办公自动化\\concat_pdf\{}-{}.pdf".format(i*50+1,(i+1)*50))for page in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page))with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\merge.pdf", "wb") as out:pdf_writer.write(out)
结果如下:
② 拆分pdf
这里有一个“时间序列.pdf”的文件,共3页,我们将其每一页存为一个PDF文件。代码如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\时间序列.pdf")
for page in range(pdf_reader.getNumPages()):pdf_writer = PdfFileWriter()pdf_writer.addPage(pdf_reader.getPage(page))with open(f"G:\\6Tipdm\\7python办公自动化\\concat_pdf\\{page}.pdf", "wb") as out:pdf_writer.write(out)
结果如下:
2)旋转及排序pdf
① 旋转pdf
.rotateClockwise(90的倍数):顺时针旋转90度
.rotateCounterClockwise(90的倍数):逆时针旋转90度
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\时间序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):if page % 2 == 0:rotation_page = pdf_reader.getPage(page).rotateCounterClockwise(90)else:rotation_page = pdf_reader.getPage(page).rotateClockwise(90)pdf_writer.addPage(rotation_page)with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\\旋转.pdf", "wb") as out:pdf_writer.write(out)
"""
上述代码中,我们循环遍历了这个pdf,对于偶数页我们逆时针旋转90°,对于奇数页我们顺时针旋转90°;
注意:旋转的角度只能是90的倍数;
"""
其中一页效果展示如下:
② 排序pdf
需求:我们有一个PDF文件,我们需要倒序排列,应该怎么做呢?首先,我们来看python中,怎么倒叙打印一串数字,如下图所示。那么倒序排列一个pdf,思路同上,代码如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\时间序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()-1, -1, -1):pdf_writer.addPage(pdf_reader.getPage(page))
with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\\倒序.pdf", "wb") as out:pdf_writer.write(out)
结果如下:
4、pdf批量加水印及加密、解密
1)批量加水印
from PyPDF2 import PdfFileReader, PdfFileWriter
from copy import copywater = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\水印.pdf")
water_page = water.getPage(0)pdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\aa.pdf")
pdf_writer = PdfFileWriter()for page in range(pdf_reader.getNumPages()):my_page = pdf_reader.getPage(page)new_page = copy(water_page)new_page.mergePage(my_page)pdf_writer.addPage(new_page)
with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\\添加水印后的aa.pdf", "wb") as out:pdf_writer.write(out)
"""
这里有一点需要注意:进行pdf合并的时候,我们希望“水印”在下面,文字在上面,因此是“水印”.mergePage(“图片页”)
"""
结果如下:
2)批量加密、解密
这里所说的“解密”,是在知道pdf的密码下,去打开pdf,而不是暴力破解;
① 加密pdf
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\时间序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page))
# 添加密码
pdf_writer.encrypt("a123456")
with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\\时间序列.pdf", "wb") as out:pdf_writer.write(out)
结果如下:
② 解密pdf并保存为未加密的pdf
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_reader = PdfFileReader(r"G:\6Tipdm\7python办公自动化\concat_pdf\时间序列.pdf")
# 解密pdf
pdf_reader.decrypt("a123456")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):pdf_writer.addPage(pdf_reader.getPage(page))
with open("G:\\6Tipdm\\7python办公自动化\\concat_pdf\\未加密的时间序列.pdf", "wb") as out:pdf_writer.write(out)
结果如下:
作者 :Huang Supreme
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
本站qq群704220115,加入微信群请扫码:
【Python基础】python使用PyPDF2和pdfplumber操作pdf相关推荐
- Python基础-Python基础使用
Python基础-Python基础使用 1.Python解释器 在Python文件的开头加入以下代码就制定了解释器. #!/usr/bin/env python # _*_ coding:utf-8 ...
- python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值
python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...
- Python基础day07 作业解析【文件操作(文件读写、文件夹操作)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day07[文件读写.文件夹操作.面向对象(类.对象)] 目录 加强训练 题目1 ...
- Python基础知识十二【文件操作】
文件操作 1.文本文件和二进制文件 2.文件操作相关模块概述 3.创建文件对象 4.文本文件的写入 4.1基本的文件写入操作 5.常用编码介绍 5.1 ASCII 5.2 ISO8859-1 5.3 ...
- Python基础__Python序列基本类型及其操作(1)
本节考虑的Python的一个中要的内置对象序列, 所谓的序列即一个有序对象的集合.这里的对象可以是数字.字符串等.根据功能的不同将序列分为字符串.列表.元组,本文将以下这几种对象做一些介绍. 一. 字 ...
- 每日整理Python基础——python教程入门学习
01_Linux基础 1.操作系统的作用? 操作系统是配置在计算机硬件上的第一层软件,主要作用是管理好硬件设备. 2.Linux中根目录和家目录分别用什么表示? /表示根目录.~表示家目录 3.Lin ...
- Python 基础 —— Python程序员常犯的那些错误
1. 迭代时修改一个列表 删除列表中的奇数 >>>numbers = [i for i in range(10)] >>>numbers [0, 1, 2, 3, ...
- Python基础--Python简介和入门
☞写在前面 在说Python之前,我想先说一下自己为什么要学Python,我本人之前也了解过Python,但没有深入学习.之前接触的语言都是Java,也写过一些Java自动化用例,对Java语言只能说 ...
- python基础教程pdf刘浪_《Python基础教程(第3版)》 PDF高清完整版_初学者如何学习Python...
<Python基础教程(第3版)> PDF高清完整版 初学者如何学习Python 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基 ...
最新文章
- Java新手会遇到的三大误区,一定要避免!
- 自动驾驶制图中的深度学习
- OpenCV使用pointPolygonTest的实例(附完整代码)
- C#设计模式之14-命令模式
- 全栈开发永远成不了高级程序员?!
- SpringMVC中自定义类型转换器
- mongodb的常用增删改查命令:
- Atitit 编程语言原理与概论attilax总结
- 桂林电子科技大学第三届ACM程序设计竞赛 C
- QT5.14.2使用webkit引擎完成网页浏览
- 嵌入式图形解决方案升级!RT-Thread Smart成功支持ARM Mali GPU
- 2022电工(初级)考试题库模拟考试平台操作
- 关于ZXing二维码扫描的时候偶然出现数字问题
- RocksDB问题点解决及相关学习记录
- Win11的两个实用技巧系列之自动开机、麦克风声音设置
- 北大-算法基础 烘晾衣服POJ3104
- 【知识点】(三)连续与导数
- 吉首大学第九届"新星杯"大学生程序设计大赛(重现赛)
- 定积分的计算(分部积分法)
- win10应用商店无法安装应用,错误代码0x80070005
热门文章
- asp.net实现GZip压缩和GZip解压
- HDU-3280 Equal Sum Partitions
- C# 连接Oracle(利用ODP.net,不安装oracle客户端)
- 项目管理13禁忌[转]
- 未曾秋高气爽,亦然爬山去也
- ​​毕业论文选题三步法
- 代谢组学的相关分析数据库,MetaboAnalyst 5.0 使用指南
- python项目实战_2个Python入门级的实战项目
- 父与子的编程之旅 python 3 pdf_《父与子的编程之旅》嵌套循环例题解析
- 图像处理--线line 提取