为了安全起见,我需要以数字方式携带一些基本文件,例如护照,健康报告和其他政府身份证,并且我不希望其他人拥有我的敏感信息。因此,我想到了使用密码对这些文件进行加密的操作,以便只有我才能看到。
因此,我开始构建一个GUI应用程序来加密这些文件。
我为此项目使用了两个主要模块,
- PyPDF2-帮助我们提取信息,合并文档和加密文档等。只需运行pip install PyPDF2即可安装此模块。
- Tkinter-创建GUI应用程序,它是Python标准库中内置的唯一框架。
在构建GUI应用程序之前,我们将了解使用PyPDF2模块加密文件有多么容易
加密文件的代码
import PyPDF2
#Locate pdf file inside PdfFileReader funtion
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_writer = PyPDF2.PdfFileWriter()
for page_num in range(pdf_reader.numPages):
pdf_writer.addPage(pdf_reader.getPage(page_num))
#encrypt method encrypts files with given password
pdf_writer.encrypt("password")
#create a pdf file and make it in wb mode
result_pdf = open('Lockedfile.pdf','wb')
pdf_writer.write(result_pdf)
#Close the file
result_pdf.close()
现在,我们将使用Tkinter构建一个GUI应用程序(与其他GUI框架相比,它具有更大的功能)
建立GUI应用程式的程式码
import tkinter as tk
from tkinter import messagebox
import PyPDF2
from PIL import Image,ImageTk
from tkinter.filedialog import askopenfile
root = tk.Tk()
root.title("PDF Locker")
canvas = tk.Canvas(root,width=600,height=300)
canvas.grid(columnspan=3)
#logo
logo = Image.open('/Users/sunilaleti/Desktop/logo.png')
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
logo_label.image=logo
logo_label.grid(column=1,row=0)
#instructions
instructions=tk.Label(root,text="Enter a password and select a pdf to encrypt\n")
instructions.grid(columnspan=3,column=0,row=1)
#Creating a input field for password
password=tk.Entry(root,show="*",width=15)
password.grid(column=1,row=2)
def open_file():
pdf_file=askopenfile(parent=root,mode="rb",title="choose a file",filetypes=[("PDF Files"," *.pdf")])
FileName=file.name.split(".")[0]
if pdf_file is not None:
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_writer = PyPDF2.PdfFileWriter()
for page_num in range(pdf_reader.numPages):
pdf_writer.addPage(pdf_reader.getPage(page_num))
pdf_writer.encrypt(password.get())
encryptedFile=FileName+"_Encrypted.pdf"
result_pdf = open(encryptedFile,'wb')
pdf_writer.write(result_pdf)
result_pdf.close()
#To clear input field
password.delete(0, 'end')
#Message box to show success message
messagebox.showinfo("Success","File encrypted successfully")
else:
messagebox.showerror("Failed","Unable to encrypt file")
#Creating "Browse file" button using tk.Button
browse_btn=tk.Button(root,text="Browse file",command=lambda:open_file(),width="15",height="2")
browse_btn.grid(column=1,row=4)
canvas=tk.Canvas(root,width=600,height=250)
canvas.grid(columnspan=3)
root.mainloop()