当前位置:网站首页>【pypdf2】安装、读取和保存、访问页面、获取文本、读写元数据、加密解密
【pypdf2】安装、读取和保存、访问页面、获取文本、读写元数据、加密解密
2022-08-10 23:50:00 【冰冷的希望】
1.安装pypdf2
pip install PyPDF2
2.打开和保存PDF文件
pypdf2有PdfReader和PdfWriter两个对象分别用于读和写,reader()方法直接指定PDF文件的路径即可读取PDF文件,writer可以临时保存PDF内容,然后调用write()方法传入文件句柄即可保存到硬盘
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test.pdf") # 打开一个reader用于读取PDF文件
writer = PdfWriter() # 打开一个writer用于写入PDF
writer.add_page(reader.getPage(0)) # # 把PDF第一页添加到writer
# 保存PDF
with open("test2.pdf", "wb") as f:
writer.write(f)
添加空白页可以通过addBlankPage()方法,但注意,如果PdfWriter对象是空的,你需要指定宽高才能添加空白页,如果PdfWriter已有页面不指定宽高则采用上一页的宽高。可以通过PageObject对象的mediabox属性查看宽高信息
from PyPDF2 import PdfReader, PdfWriter
writer = PdfWriter()
writer.addBlankPage(612, 810) # 如果writer是一个空白的页面
writer.addBlankPage() # 添加一页空白页
print(writer.getPage(0).mediabox) # 查看页面宽高
with open("test2.pdf", "wb") as f:
writer.write(f)
3.获取页面
我们可以通过下标获取页面或者直接遍历所有页面,返回得到PageObject对象
from PyPDF2 import PdfReader
reader = PdfReader("test.pdf")
# 获取总页数
page_count = reader.getNumPages()
# 下标取值,获取第1页
page = reader.getPage(0)
# 遍历所有页面
for page in reader.pages:
print(reader.getPageNumber(page)) # 获取page所在页码号
4.获取PDF文本内容
PageObject对象有一个extract_text()方法可以获取该页面的文本字符串,但是注意,官方文档提到只是简单获取文本,不保证公式等排版等信息是否正确
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test.pdf")
for index, page in enumerate(reader.pages): # 遍历所有页面
print(f"第{
index}页文本:")
print(page.extract_text())
5.读写元数据
一份PDF可以保存标题、作者、修改时间等元数据信息,当然我们也可以修改
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("test.pdf")
# 获取元数据信息
meta = reader.metadata # 返回一个类字典的DocumentInformation对象
# meta = reader.getDocumentInfo()) # 也reader.metadata等价
print(type(meta), len(meta), meta) # {'/Producer': 'Adobe LiveCycle PDF Generator', '/ModDate': ...}
print(meta.author) # 作者
print(meta.creator) # 创建者
print(meta.producer) # 制作者
print(meta.title) # 标题
print(meta.subject) # 子标题
print(meta.getText("/ModDate")) # 获取其他键值
# 更新元数据
meta.update({
"/Author": "pan"})
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.add_metadata(meta) # 该参数也可以直接是字典类型
with open("test2.pdf", "wb") as f:
writer.write(f)
如果某个元数据键值不存在则返回None
6.加密解密
加密解密过程很简单,只需要传入秘钥调用对应的encrypt()和decrypt()即可
from PyPDF2 import PdfReader, PdfWriter
writer = PdfWriter()
writer.addBlankPage(612, 810)
secret = "fLa5fpao%3paH" # 密码
# 加密
writer.encrypt(secret)
with open("test2.pdf", "wb") as f:
writer.write(f)
reader = PdfReader("test2.pdf")
# 判断是否加密
if reader.is_encrypted:
# 解密
reader.decrypt(secret)
需要注意的是,调用decrypt()解密即使密码不对也不会报错,但后期你访问或操作该PDF会报错
边栏推荐
- 15. 拦截器-HandlerInterceptor
- 三栏布局实现
- 15. Interceptor - HandlerInterceptor
- SAS数据处理技术(一)
- Three-column layout implementation
- Dump file generation, content, and analysis
- 8. WEB 开发-静态资源访问
- [Excel knowledge and skills] Convert "false" date to "true" date format
- Where can I download IEEE papers?
- sqlmap combined with dnslog fast injection
猜你喜欢
15. Interceptor - HandlerInterceptor
SAS数据处理技术(一)
工程师如何对待开源
How to recover deleted files from the recycle bin, two methods of recovering files from the recycle bin
12. Handling JSON
I caught a 10-year-old Ali test developer, and after talking about it, I made a lot of money...
[数据可视化] 图表设计原则
Promise in detail
Deep Learning Transformer Architecture Analysis
特殊类与类型转换
随机推荐
HGAME 2022 Final Pokemon v2 writeup
12. 处理 JSON
LENS CRA和SENSOR CRA匹配问题解析
Geogebra 教程之 01 什么是Geogebra,真的可以提高我们数学水平么?
Design and implementation of flower online sales management system
缓存知识总结
线上突然查询变慢怎么核查
[C language] First understanding of pointers
excel英文自动翻译成中文教程
宝塔实测-搭建PHP在线模拟考试系统
Software protection scenario of NOR FLASH flash memory chip ID application
地下管廊可视化管理系统搭建
如何判断一个数为多少进制?
给肯德基打工的调料商,年赚两亿
Special class and type conversion
Summary of Confused Knowledge Points for "High Items" in the Soft Examination in the Second Half of 2022 (2)
盘点美军的无人机家底
Excel English automatic translation into Chinese tutorial
高校就业管理系统设计与实现
sqlmap combined with dnslog fast injection