class PdfPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, id=-1) self.pdf = None sizer = wx.BoxSizer(wx.VERTICAL) if NOT_USE_ADOBE: self.pdf = wx.StaticText( self, -1, u"Cette fonctionnalité n'est disponible qu'avec Adobe Acrobat Reader\n" ) # from wx.lib.pdfviewer import pdfViewer # self.pdf = pdfViewer( self, wx.NewId(), wx.DefaultPosition, # wx.DefaultSize, wx.HSCROLL|wx.VSCROLL|wx.SUNKEN_BORDER) else: self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDER) # if ADOBE_VERSION == None: # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est disponible qu'avec Adobe Acrobat Reader\n"\ # u"Pour obtenir le dossier de validation, passer par le menu Fichier/Générer le dossier de validation.") # else: # if ADOBE_VERSION[:3] == (11, 0, 7) or ADOBE_VERSION[:3] == (11, 0, 8): # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est pas compatible Adobe Acrobat Reader version 11.0.07 !!\n\n"\ # u"Pour visualiser le dossier de validation :\n"\ # u" - Passer à la version 10.0.09 - si disponible (http://get.adobe.com/fr/reader)\n" \ # u" - Utiliser la version 11.0.06 (http://www.adobe.com/support/downloads/product.jsp?product=10&platform=Windows)\n" \ # u" - Utiliser la version 10 (http://get.adobe.com/fr/reader/otherversions)\n" \ # u" - Générer le fichier .pdf : menu Fichier/Générer le dossier de validation projet") # elif get_min_adobe_version() != None: # self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDER) # else: # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est disponible qu'avec Adobe Acrobat Reader\n"\ # u"Pour obtenir le dossier de validation, passer par le menu Fichier/Générer le dossier de validation.") # else: # self.pdf = pdfViewer( self, -1, wx.DefaultPosition, # wx.DefaultSize, wx.HSCROLL|wx.VSCROLL|wx.SUNKEN_BORDER) sizer.Add(self.pdf, proportion=1, flag=wx.EXPAND) self.SetSizer(sizer) self.sizer = sizer self.SetAutoLayout(True) self.pdf.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) ###################################################################################################### def OnEnter(self, event): print "OnEnter PDF" self.pdf.SetFocus() event.Skip() def MiseAJour(self, projet, fenDoc): if isinstance(self.pdf, wx.StaticText): # if get_min_adobe_version() == None: print "Problème version Adobe" return # if hasattr(self, 'dosstemp') and get_min_adobe_version() == None: # shutil.rmtree(self.dosstemp) self.dosstemp = tempfile.mkdtemp() fichertemp = os.path.join(self.dosstemp, "pdfdoss.pdf") wx.BeginBusyCursor() Ok = genererDossierValidation(fichertemp, projet, fenDoc) if Ok: if not self.chargerFichierPDF(fichertemp): wx.EndBusyCursor() return # try: # self.pdf.LoadFile(fichertemp) # except: # print "ERREUR PDF" # wx.EndBusyCursor() # return if True: #get_min_adobe_version() != None: try: shutil.rmtree(self.dosstemp) except: time.sleep(.5) try: shutil.rmtree(self.dosstemp) except: pass wx.EndBusyCursor() if not Ok: self.pdf = wx.StaticText( self, -1, u"Un des textes descriptifs du projet est trop grand !") self.sizer.Add(self.pdf, proportion=1, flag=wx.EXPAND) def chargerFichierPDF(self, nomFichier): if isinstance(self.pdf, wx.StaticText): return if NOT_USE_ADOBE: try: self.pdf.LoadFile(nomFichier) except: print "ERREUR pdfViewer", self.pdf else: try: self.pdf.LoadFile(nomFichier) except: print "ERREUR PDFWindow", self.pdf
class PdfPanel(wx.Panel, FullScreenWin): def __init__(self, parent): wx.Panel.__init__(self, parent, id=-1) self.pdf = None sizer = wx.BoxSizer(wx.VERTICAL) if True: #NOT_USE_ADOBE: if HAS_PDFVIEWER: self.pdf = pdfViewer( self, -1, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL | wx.VSCROLL | wx.SUNKEN_BORDER) else: self.pdf = PanelBoutonPdf(self) else: m = GetProtectedModeReader() EnableProtectedModeReader(0) self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDER) EnableProtectedModeReader(m) # if ADOBE_VERSION == None: # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est disponible qu'avec Adobe Acrobat Reader\n"\ # u"Pour obtenir le dossier de validation, passer par le menu Fichier/Générer le dossier de validation.") # else: # if ADOBE_VERSION[:3] == (11, 0, 7) or ADOBE_VERSION[:3] == (11, 0, 8): # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est pas compatible Adobe Acrobat Reader version 11.0.07 !!\n\n"\ # u"Pour visualiser le dossier de validation :\n"\ # u" - Passer à la version 10.0.09 - si disponible (http://get.adobe.com/fr/reader)\n" \ # u" - Utiliser la version 11.0.06 (http://www.adobe.com/support/downloads/product.jsp?product=10&platform=Windows)\n" \ # u" - Utiliser la version 10 (http://get.adobe.com/fr/reader/otherversions)\n" \ # u" - Générer le fichier .pdf : menu Fichier/Générer le dossier de validation projet") # elif get_min_adobe_version() != None: # self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDER) # else: # self.pdf = wx.StaticText(self, -1, u"Cette fonctionnalité n'est disponible qu'avec Adobe Acrobat Reader\n"\ # u"Pour obtenir le dossier de validation, passer par le menu Fichier/Générer le dossier de validation.") # else: # self.pdf = pdfViewer( self, -1, wx.DefaultPosition, # wx.DefaultSize, wx.HSCROLL|wx.VSCROLL|wx.SUNKEN_BORDER) sizer.Add(self.pdf, proportion=1, flag=wx.EXPAND) self.mess = wx.StaticText(self, -1, "") sizer.Add(self.mess, proportion=1, flag=wx.EXPAND) sizer.Show(self.mess, False) self.SetSizer(sizer) self.sizer = sizer self.SetAutoLayout(True) self.pdf.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter) FullScreenWin.__init__(self, self.pdf) # self.Bind(wx.EVT_CLOSE, self.OnClose ) # self.pdf.Bind(wx.EVT_WINDOW_DESTROY, self.OnClose) # self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroyWindow) # ###################################################################################################### # def OnDestroyWindow(self, event): # print "OnDestroy pdf" # self.pdf.Unbind(wx.EVT_ENTER_WINDOW) # self.pdf.FreeDlls() # print "...FAIT" # ###################################################################################################### def PreClose(self): print("PreClose pdf") try: self.pdf.LoadFile(None) self.pdf.FreeDlls() except: pass # # # self.sizer.Detach(self.pdf) # # self.pdf.Unbind(wx.EVT_ENTER_WINDOW) # # # self.pdf.Close() # # self.sizer.Remove(self.pdf) # # self.pdf.Destroy() # # time.sleep(3) # # wx.CallAfter(self.pdf.Close) # # self.Destroy() # # self.pdf.Destroy() # # evt.Skip() ###################################################################################################### def OnEnter(self, event): # print "OnEnter PDF" self.pdf.SetFocus() event.Skip() ###################################################################################################### def MiseAJour(self, projet, fenDoc): """ Génération d'un fichier PDF temporaire pour affichage - Dossier de validation - ... """ self.dosstemp = tempfile.mkdtemp() fichertemp = os.path.join(self.dosstemp, "pdfdoss.pdf") wx.BeginBusyCursor() Err = genererDossierValidation(fichertemp, projet, fenDoc) wx.EndBusyCursor() # print("1") if len(Err) == 0: Err = self.chargerFichierPDF(fichertemp) # print("2") # self.sizer.Show(self.pdf, len(Err) == 0) self.sizer.Show(self.mess, len(Err) > 0) # print("3") if len(Err) > 0: m = "Une erreur s'est porduite lors de la création ou l'affichage du fichier PDF.\n\n" m += "\n".join(Err) self.mess.SetLabel(m) self.sizer.Layout() ###################################################################################################### def supprimerDossierTemp(self): """ Suppression du dossier temporaire Méthode brute """ if True: #get_min_adobe_version() != None: try: shutil.rmtree(self.dosstemp) except: time.sleep(.5) try: shutil.rmtree(self.dosstemp) except: pass ###################################################################################################### def chargerFichierPDF(self, nomFichier): """ Affichage en interne du fichier PDF ou bien mise à jour du bouton d'affichage externe """ Err = [] if isinstance(self.pdf, PanelBoutonPdf): self.pdf.MiseAJour(nomFichier) elif isinstance(self.pdf, pdfViewer): wx.BeginBusyCursor() try: self.pdf.LoadFile(nomFichier) except: Err.append("ERREUR pdfViewer") finally: wx.EndBusyCursor() elif isinstance(self.pdf, PDFWindow): wx.BeginBusyCursor() try: self.pdf.LoadFile(nomFichier) except: Err.append("ERREUR PDFWindow") finally: wx.EndBusyCursor() return Err