本篇介绍使用 office 库处理 PDF文件.
office库简介
office库是笔者写的python库,用于办公自动化,功能是很强的, 包括:PPT自动生成、PPT转长图、PPT带语音播放、Word自动生成、Excel数据处理、图片处理、视频处理、office文档转为PDF、PDF加解密、加水印等等,都是实用的干货。
使用方法极简,大多数功能只需一行、两行代码。
使用PIP 安装office库:
请在命令行,通过PIP安装:
pip install jojo-office
office库的安装名称是 jojo-office
使用时: import office 即可。
import office
六、PDF文件处理
1,各类office文档转为PDF
对于 Word, Excel, Power文档,均可存为PDF文件 (office库调用相应Office程序完成,需本机安装有Office)。
import office
# 打开word文件,存为pdf文件
office.open_file("input.docx").save("output.pdf")
# 打开excel文件,存为pdf文件
office.open_file("input.xlsx").save("output2.pdf")
# 打开ppt文件,存为pdf文件
office.open_file("input.pptx").save("output3.pdf")
2,提取PDF部分页面
import office
# 打开PDF文件
pdf = office.open_file("report.pdf")
# 取得页数
total_pages = len(pdf)
# 需要的页的列表
need_pages = [0, 1]
# 存盘为新文件,只保留需要的页
pdf.save("report_0_1.pdf", pages=need_pages)
说明:
1, 调用 save()方法时, pages 参数指定一个页数列表 (第一页为0, ...), 则存盘时只保存指定的页,其他页不要了。
2, 对pdf对象, len(pdf) 将返回pdf文件的总页数。
3, office.open_file() 可以打开 .pdf文件, 返回 PDF类的对象。也可以直接调用PDF类打开文件,效果是一样的:
pdf = office.PDF("report.pdf")
3,PDF文件加密
PDF文件支持密码。
# 打开PDF文件, 存盘时加上 password 参数,则存盘pdf文件将有密码保护
office.open_file("report.pdf").save("report_encrypted.pdf", password="123")
4,PDF文件解密
import office
# 打开已加密的PDF文件时,应加上 password 参数
pdf = office.open_file("report_encrypted.pdf", password="123")\
# 再存盘时,不加 password 参数,则存盘文件将无密码。
pdf.save("report_new.pdf")
干货: pdf文件的密码不能太简单,否则,他人可以通过暴力破解法轻松获得密码(暴力破解法就是拿一个密码字典,一个一个密码不断去试,直到攻破)。 office库提供了一个 对PDF文件的 guess_password() 的方法,支持密码字典破解。破解程序如下:
import office
# 打开已加密的PDF文件时, 注意:没有password参数
pdf = office.open_file("report_encrypted.pdf")
# 调用 guess_password() 方法,进行密码破解
password = pdf.guess_password()
print('password is', password)
程序运行结果: password is 123
可见,弱密码是多么可怕。一个不弱的密码应不少于8个字符,由大小写字母、数字、特殊符号组成,不要用连续数字、字母、生日、手机号码等。
可以自己写一个密码字典文件(文本文件,每一行是一个密码),调用 guess_password() 时代入字典文件名即可,如下:
# 字典文件是 dict.txt
pdf.guess_password("dict.txt")
5,PDF文件加水印
import office
# 打开PDF文件
pdf = office.open_file("report.pdf")
# 存盘时,加上 watermark 参数,则存盘文件将有水印文字
pdf.save("report_with_mark.pdf", watermark="商业秘密,注意保管")
注意:
1, 加水印功能依赖 reportlab 库, 请先安装
2, 加水印并不是十分安全的,因为有方法可以去水印 (PS: 不详细讲了).
6, 提取PDF文件中的文字、表格
注意: 取pdf文字、表格的功能,依赖 pdfplumber 库,请先安装: pip install pdfplumber
# 打开PDF文件
pdf = office.open_file("report.pdf")
# 获得PDF文件中的文字
text_list = pdf.text()
print(text_list)
# 获得PDF文件中的表格,返回值是一个列表,每个元素是一个表格(一个表格是一个二维数组)
table_list = pdf.tables()
print(table_list)
程序运行结果:
业务发展汇报
2022年01月
编制人
...
[[['城市', '销量', '金额'], ['广州', '20773', '1003'], ['深圳', '32005', '1233.8'], ...
如果只想取某一页的文字、图标,则代码为:
# 打开PDF文件
pdf = office.open_file("report.pdf")
# 获得第2页中的文字 (注:第1页索引号为0)
text = pdf.pages[1].text()
print(text)
# 获得第2页中的文字
table_list = pdf.pages[1].tables()
print(table_list)
说明: pages[index] 可以取得某一页, 再调用 text(), tables()
续篇:
office库还有其他许多功能,下节课再讲。
office库还在开发完善中,偶有bug请见谅、或提改进。
有兴趣深入研究的,可以看office.py的源码。