PDF加密,解密小程序,历时3天终于调试上线了!不过本程序目前只完成了PDF加密和解密,
对于word转txt还没有写完,点击会有提示窗口功能待开发,哈哈,你们可以考虑自己去填充这部分。
话不多说,代码在最后,你们自己试试吧。程序里面有个有意思的地方自己挖掘。
1. 选择文件, File link:显示对应的文件路径
2.点击开始加密, 跳出密码输入对话框,输入想要加密的密码;
3.点击SUMBIT递交,跳出对话框,点击OK,
4.进度条等待, 然后是提示框里面显示xxx文件,加密结束
5.本程序对已经加密的文件做了识别,如果选择文件为已经加密的文件则如图:
import PySimpleGUI as sg
import re
# 主题设置
sg.theme('HSSFColor.TEAL')
# 布局设置
layout = [
[sg.Text('File link:', font=("Adobe 宋体 Std L", 15)),
sg.Text('', key='filename', size=(50, 1), font=("Arial Nova", 10), text_color='blue')],
[sg.Text('程序操作记录', justification='center')],
[sg.Output(size=(80, 20), font=("Adobe 宋体 Std L", 10)),sg.Combo(['Method 1', 'Method 2'])],
[sg.FileBrowse('选择文件', key='file', target='filename'), sg.Button('开始加密'), sg.Button('开始解密'), sg.Button('word-txt'), sg.Button('关闭程序')]
]
# 创建窗口
window = sg.Window('PDF加密解密小程序,作者:Dieter', layout, font=("微软雅黑", 15),
default_element_size=(50, 1))
# 事件循环
while True:
event, values = window.read()
if event in (None, '关闭程序'):
break
if event == '开始加密':
if values['file'] and re.findall(r'\.(\S+)', values['file'])[0] == 'pdf':
fileName = values['file']
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader(fileName)
writer = PdfWriter()
if reader.is_encrypted:
print('文件已加密\n请选择其他文件')
# 拷贝每一页的内容
else:
for page in reader.pages:
writer.add_page(page)
import PySimpleGUI as sg
#while True:
layout2 = [[sg.Text('Password input.')],
[sg.InputText()],
[sg.Submit('SUMBIT'), sg.Cancel('CANCEL')]]
window2 = sg.Window('Window Title', layout2)
event2, values2 = window2.read()
if event2 in (None, 'CANCEL'):
sg.popup('Nothing') # 弹出窗口\
if event2 == 'SUMBIT':
window2.close()
text_input1 = values2[0]
sg.popup('You entered', text_input1) # 弹出窗口
#进度条
count = range(1000)
for i, item in enumerate(count):
sg.one_line_progress_meter('实时进度条', i + 1, len(count), '-key-')
# 在新的pdf文件中添加密码
writer.encrypt(text_input1)
# 保存成新的pdf
name = re.findall(r'(.*?)\.', fileName)[0]
pdf_file1 = f'{name}加密.pdf'
with open(pdf_file1, "wb") as f:
writer.write(f)
page = reader.pages[0]
print(page.extract_text())
print(pdf_file1)
print('\n----------加密完毕----------\n')
else:
print('文件未选取或文件非pdf文件\n请先选择文件')
if event == '开始解密':
if values['file'] and re.findall(r'\.(\S+)', values['file'])[0] == 'pdf':
fileName = values['file']
import PySimpleGUI as sg
from PyPDF2 import PdfReader, PdfWriter
# 读取上面加密的pdf文件
reader = PdfReader(fileName)
writer = PdfWriter()
# 解密
if reader.is_encrypted:
import PySimpleGUI as sg
layout3 = [[sg.Text('Password input.')],
[sg.InputText()],
[sg.Submit(), sg.Cancel()]]
window3 = sg.Window('Window Title', layout3)
event3, values3 = window3.read()
window3.close()
text_input3 = values3[0]
count = range(1000)
for i, item in enumerate(count):
sg.one_line_progress_meter('实时进度条', i + 1, len(count), '-key-')
reader.decrypt(text_input3)
for page in reader.pages:
writer.add_page(page)
# 保存解密后的pdf
name = re.findall(r'(.*?)\.', fileName)[0]
pdf_file2 = f'{name}解密.pdf'
with open(pdf_file2, "wb") as f:
writer.write(f)
# 保存成新的pdf
# 将每一页内容加到writer对象中
page = reader.pages[0]
print(page.extract_text())
print(pdf_file2)
print('\n----------解密完毕----------\n')
else:
print('文件未选取或文件非pdf文件\n请先选择文件')
# word to txt
if event == 'word-txt':
if values['file'] and re.findall(r'\.(\S+)', values['file'])[0] == 'docx':
fileName = values['file']
print('\n--------功能等待开发--------\n')
else:
print('文件为选取或非word文件\n请先选择文件')
window.close()