Python 自动化教程(6) : PDF文件处理

本篇介绍使用  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")

扫描二维码关注公众号,回复: 15220882 查看本文章

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的源码。

猜你喜欢

转载自blog.csdn.net/c80486/article/details/126575152