0/5 (1 avis)
Snippet vu 7 251 fois - Téléchargée 19 fois
# -*- coding: cp1252 -*- import Tkinter import tkFileDialog import os from pyPdf import PdfFileWriter, PdfFileReader class PyCryptPdfIGU: def __init__(self, parent): """Initialisation de l'IGU""" self.parent=parent self.parent.title("Cryptage de fichiers pdf") self.menuBar() self.widget() self.container=Tkinter.Frame(self.parent) self.interface=Tkinter.Text(self.container) self.interface.insert('end','Bonjour et bienvenu\nPour tout renseignement tonny.rosca@gmail.com\n...') self.interface.pack(side='left',expand='YES',fill='both') self.yscrollbar=Tkinter.Scrollbar(self.container) self.yscrollbar.pack(side='right',fill='y') self.container.pack(fill='both',expand='YES') self.yscrollbar.config(command=self.interface.yview) self.option=0 try: fileOption=open('parameters.txt','r') while 1: line=fileOption.readline() if line=="": break exec(line) self.interface.insert('end',"Parametres charges avec succes :\n......Repertoire parent : "+str(self.pathIn)+"\n......Mot de passe : "+str(self.passw)+"\n...") except: fileOption=open('parameters.txt','w') fileOption.write("self.pathIn='C:'\nself.passw='password'\nself.viewOption='d'") fileOption.close() self.pathIn='C:' self.passw='password' self.viewOption='d' self.interface.insert('end',"Parametres charges avec succes :\n......Repertoire parent : "+str(self.pathIn)+"\n......Mot de passe : "+str(self.passw)+"\n...") def menuBar(self): """Initialisation de la barre de menu""" menu=Tkinter.Menu() fichier=Tkinter.Menu() fichier.add_command(label='Quitter',command=self.parent.destroy) menu.add_cascade(label='Fichier',menu=fichier) parameters=Tkinter.Menu() parameters.add_command(label="Choix du repertoire de recherche",command=self.askPathIn) parameters.add_command(label="Choix du mot de passe",command=self.askPassword) parameters.add_command(label="Preferences",command=self.option) menu.add_cascade(label='Parametres',menu=parameters) aide=Tkinter.Menu() aide.add_command(label='A propos...',command=self.aboutVersion) aide.add_command(label='Aide',command=self.aboutHelp) menu.add_cascade(label='?',menu=aide) self.parent.config(menu=menu) def aboutHelp(self): """Aide""" self.interface.insert('end','1. Choisir le repertoire de recherche\n...2. Choisir un mot de passe\n...3. Effectuer le traitement\n...4. Effacer eventuellement les sources non cryptees\n...Pour tout renseignement tonny.rosca@gmail.com\n...') self.yscrollbar.config(command=self.interface.yview) def aboutVersion(self): """Version""" self.interface.insert('end',"Cryptage de fichier pdf V1.2\n...") self.yscrollbar.config(command=self.interface.yview) def widget(self): """Boutons d'action""" self.button=Tkinter.Frame(self.parent) self.b0=Tkinter.Button(self.button,text="Effectuer le traitement",command=self.confirmChoiseCrypt) self.b1=Tkinter.Button(self.button,text="Suppression des fichier apres traitement",command=self.confirmChoiseSuppr) self.b0.pack(side='left',expand='YES',fill='x') self.b1.pack(side='left',expand='YES',fill='x') self.button.pack(side='top',expand='NO',fill='x') def askPathIn(self): """Fenetre de selection d'un repertoire d'entree""" self.pathIn=tkFileDialog.askdirectory(parent=self.parent,initialdir=self.pathIn,title="Choisissez un repertoire de recherche") self.interface.insert('end',"Repertoire de recherche : "+str(self.pathIn)+"\n...") def askPassword(self): """Fenetre de selection d'un mot de passe""" self.paramWindow=Tkinter.Toplevel() self.paramWindow.title("Mot de passe") container1=Tkinter.Frame(self.paramWindow) label1=Tkinter.Label(container1,text='Entrez le mot de passe') label1.pack(side='left',fill='x') self.password1=Tkinter.Entry(container1,show='*') self.password1.pack(fill='x',side='right') container2=Tkinter.Frame(self.paramWindow) label2=Tkinter.Label(container2,text='Confirmez le mot de passe') label2.pack(side='left',fill='x') self.password2=Tkinter.Entry(container2,show='*') self.password2.pack(fill='x',side='right') containerButton=Tkinter.Frame(self.paramWindow) buttonValid=Tkinter.Button(containerButton,text='Valider',command=self.validPassw) buttonValid.pack(fill='x') buttonCancel=Tkinter.Button(containerButton,text='Annuler',command=self.paramWindow.destroy) buttonCancel.pack(fill='x') container1.pack(fill='x') container2.pack(fill='x') containerButton.pack(fill='x') def validPassw(self): """Valide le choix du mot de passe""" if str(self.password1.get())==str(self.password2.get()): self.passw=self.password1.get() self.interface.insert('end',"Mot de passe accepte : "+str(self.passw)+".\n...") self.paramWindow.destroy() else: self.interface.insert('end',"Les mots de passes ne sont pas identiques, reessayez.\n...") if self.option==1:#si on doit modifier les parametre par default self.option=0 self.validDefault() def option(self): """Modification des parametres par default""" self.option=1#on doit modifier les parametre par default self.askPathIn() self.askPassword() def validDefault(self): """Sauvegarde des parametres par default""" self.interface.insert('end',"Sauvegarde des preferences\n...") try: fileOption=open('parameters.txt','w') fileOption.write("self.pathIn='"+self.pathIn+"'\nself.passw='"+self.passw+"'\nself.viewOption='d'") fileOption.close() self.interface.insert('end',"Sauvegarde effectuee avec succes\n...") except: self.interface.insert('end',"Erreur lors de la sauvegarde : Verifiez vos droit en ecriture sur le fichier 'parameters.py'") def confirmChoiseCrypt(self): """Fenetre de confirmation pour le lancement du cryptage""" self.paramWindow=Tkinter.Toplevel() self.paramWindow.title("Confirmez vous ?") container1=Tkinter.Frame(self.paramWindow) label1=Tkinter.Label(container1,text='Etes vous sur de vouloir crypter le(s) fichier(s) ?') label1.pack(side='top',fill='x') buttonValid=Tkinter.Button(container1,text='Je suis sur !',command=self.pyCryptPdf) buttonValid.pack(fill='x') buttonCancel=Tkinter.Button(container1,text='Annuler',command=self.paramWindow.destroy) buttonCancel.pack(fill='x') container1.pack(fill='x') def confirmChoiseSuppr(self): """Fenetre de confirmation pour la suppession des fichiers cryptes""" self.paramWindow=Tkinter.Toplevel() self.paramWindow.title("Confirmez vous ?") container1=Tkinter.Frame(self.paramWindow) label1=Tkinter.Label(container1,text='Etes vous sur de vouloir supprimer le(s) fichier(s) cryptes ?') label1.pack(side='top',fill='x') buttonValid=Tkinter.Button(container1,text='Je suis sur !',command=self.pyRemove) buttonValid.pack(fill='x') buttonCancel=Tkinter.Button(container1,text='Annuler',command=self.paramWindow.destroy) buttonCancel.pack(fill='x') container1.pack(fill='x') def searchFiles(self): """Recherche dans le repertoire et les sous repertoires 'path' les fichiers '*.pdf' et retourne une liste des chemins vers ces fichiers.""" self.fileIn=[]#Initialisation d'une liste representant les chemins vers fichiers ou la chaine a ete trouvee try: for root, dirs, files in os.walk(self.pathIn): #Lecture des differents fichiers du repertoire root for i in range(0,len(files)): #'Lecture du fichier' files[i],'situe dans le repertoire',root if files[i].count('.pdf')==1: self.fileIn=self.fileIn+[root+'/'+files[i]]#sauvegarde du chemin dans une liste if self.viewOption=='d': self.interface.insert('end', 'Detection de fichier(s) termine, '+str(len(self.fileIn))+' fichier(s) pdf a traiter.\n...') if len(self.fileIn): self.interface.insert('end', 'Fichier(s) a traiter :') for i in range(0,len(self.fileIn)): self.interface.insert('end',"\n......"+str(self.fileIn[i])) self.interface.insert('end','\n...') except: if self.viewOption=='d': self.interface.insert('end', 'Le repertoire '+str(self.pathIn)+' n existe pas ou n est pas accessible\n...') self.parent.update() def pyCryptage(self): """Cryptage des fichiers pdf listes dans fileIn avec le code passw""" for i in range(0,len(self.fileIn)): #test du fichier, si crypte, on passe if self.viewOption=='d': self.interface.insert('end', 'Analyse du fichier '+str(self.fileIn[i])+'\n...') self.parent.update() try: fileOpen=open(self.fileIn[i],"rb") inputPdf=PdfFileReader(fileOpen) if not inputPdf.isEncrypted: self.interface.insert('end', 'Cryptage du fichier '+str(self.fileIn[i])+' en cours\n...') self.parent.update() outputPdf=PdfFileWriter() for j in range(0,inputPdf.getNumPages()): outputPdf.addPage(inputPdf.getPage(j)) outputPdfStream=file(self.fileIn[i][0:-4]+'_py.pdf', "wb") outputPdf.encrypt(user_pwd=self.passw,owner_pwd=self.passw,use_128bit=True) outputPdf.write(outputPdfStream) outputPdfStream.close() if self.viewOption=='d': self.interface.insert('end', 'Cryptage du fichier '+str(self.fileIn[i])+' effectue avec succes\n...') self.parent.update() else: if self.viewOption=='d': self.interface.insert('end', 'Le fichier '+str(self.fileIn[i])+' est deja crypte\n...') self.parent.update() self.fileIn[i]='crypte'#Pour eviter de supprimer des fichiers deja cryptes fileOpen.close() except: if self.viewOption=='d': self.interface.insert('end', "Impossible d'ouvrir le fichier : "+str(self.fileIn[i])+'\n...') self.parent.update() self.fileIn[i]='ferme'#Pour eviter de supprimer des fichiers non cryptes if self.viewOption=='d': self.interface.insert('end', str(len(self.fileIn)-self.fileIn.count('crypte')-self.fileIn.count('ferme'))+' fichier(s) crypte(s) sur '+str(len(self.fileIn))+' dont '+str(self.fileIn.count('crypte'))+' fichier(s) deja crypte(s) et '+str(self.fileIn.count('ferme'))+' fichier(s) impossible a ouvrir'+'\n...') self.parent.update() def pyRemove(self): """Suppression des fichiers cryptes avec succes""" self.paramWindow.destroy() for i in range(0,len(self.fileIn)): if self.fileIn[i]=='crypte' or self.fileIn[i]=='ferme': pass else: try: os.remove(self.fileIn[i]) if self.viewOption=='d': self.interface.insert('end', 'Fichier '+str(self.fileIn[i])+' supprime avec succes'+'\n...') self.parent.update() self.fileIn[i]='suppr' except: if self.viewOption=='d': self.interface.insert('end', "Impossible de supprimer le fichier :"+str(self.fileIn[i])+'\n...') self.parent.update() self.fileIn[i]='notSuppr' self.interface.insert('end', str(self.fileIn.count('suppr'))+'fichier(s) crypte(s) supprime(s) et '+str(self.fileIn.count('notSuppr'))+' fichier(s) non supprime(s)\n...') self.parent.update() def pyCryptPdf(self): self.paramWindow.destroy()#fermeture de la fenetre de confirmation self.searchFiles()#recherche des fichiers suceptibles d'etre traites if len(self.fileIn):#teste si de(s) fichier(s) ont ete detecte self.pyCryptage()#cryptage des fichiers root=Tkinter.Tk() myapp=PyCryptPdfIGU(root) root.mainloop()
12 oct. 2007 à 13:13
Les opérations irréversibles, c'est pas top top.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.