예제 #1
0
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
예제 #2
0
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