IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Affichage de la première page d'un .rtf dans un formulaire tkinter


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Médecin
    Inscrit en
    Avril 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Affichage de la première page d'un .rtf dans un formulaire tkinter
    Bonjour à tous,
    Je reviens vers vous, toujours pour mon appli cabinet, pour un conseil sur un éventuel module dont vous connaîtriez l'existence.
    J'ai pour chaque dossier de ma base cab des communications avec des collègues ou des examens, brefs toutes sortes d'écrits, qui me viennent (ou partent de chez moi) soit sous forme pdf, soit sous forme rtf.
    J'affiche le nom des documents en question dans un TreeView, et je voudrais que la première page du document en question apparaisse dans un canvas positionné juste à côté.
    Pas de problème pour les pdf, avec PyMuPDF et un code de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import tkinter as tk
    from tkinter import ttk
    import fitz
    from PIL import Image, ImageTk
    from functools import partial
     
    nomPDF_1 = "2010_Reco_americ_dysphonie 1.pdf"
    nomPDF_2 = "2010_Reco_americ_dysphonie 2.pdf"
     
    def btn_Im(cheminPDF):
        global imageCanvas
        documentPDF = fitz.open(cheminPDF)
        pageDebut = documentPDF.load_page(0)
        pixPageDebut = pageDebut.get_pixmap()
        mode = "RGBA" if pixPageDebut.alpha else "RGB"
        imagePageDebut = Image.frombytes(mode, [pixPageDebut.width, pixPageDebut.height], pixPageDebut.samples)
        imagePageDebut_resized=imagePageDebut.resize((500,600), Image.ANTIALIAS)
        imageCanvas = ImageTk.PhotoImage(imagePageDebut_resized)
        cnv.create_image(0,0, anchor = tk.NW, image=imageCanvas)
        documentPDF.close()
     
    root = tk.Tk() 
     
    root.geometry("550x700")  
     
    # bouton Affichage premier pdf
    btn_Im1 = ttk.Button(root, text="Pdf 1", command=partial(btn_Im,nomPDF_1))
    btn_Im1.place(x = 10, y = 650, width = 80, height = 30)
    # bouton Affichage 2nd pdf
    btn_Im2 = ttk.Button(root, text="Pdf 2", command=partial(btn_Im,nomPDF_2))
    btn_Im2.place(x = 100, y = 650, width = 80, height = 30)
     
    # Creation du Frame 
    ssFen = ttk.Frame(root)
    ssFen.place(x = 0, y = 0, width = 550, height = 650)
     
    # Creation du Canvas pour afficher la première page du pdf
    cnv = tk.Canvas(ssFen, width = 500, height = 600) 
    cnv.place(x=10,y=10)
     
    # Affichage par défaut du premier pdf, appel de la fonction d'affichage
    btn_Im(nomPDF_1)
     
    root.mainloop()
    Je voudrais faire la même chose avec les .rtf, mais ne suis pas parvenu à trouver un module qui me permette de le faire, au moins de façon raisonnable. Le module Aspose.words fonctionne en version d'évaluation, me permet de transformer mon .rtf en .jpg ou .pdf et de l'afficher, mais je recule devant le prix (un peu moins de 1200$), rédhibitoire pour un particulier.
    J'ai essayé de charger le module "tkrichtext", qui me paraissait convenir, pas possible de l'installer avec pip.
    Enfin "python-docx" ne lit pas les .rtf

    J'ai pour finir essayé de passer par l'API win32com, mais le bout de code suivant me renvoie une erreur :
    com_error: (-2147352567, 'Une exception s’est produite.', (0, 'Microsoft Word', 'La commande a échoué', 'C:\\Program Files (x86)\\Microsoft Office\\Office12\\1036\\WDMAIN11.CHM', 36966, -2146824090), None)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import os
    import win32com.client
     
    wdFormatPDF = 17
     
    inputFile = os.path.abspath("EssaiRTF_0.rtf")
    outputFile = os.path.abspath("EssaiRTF_0.pdf")
    word = win32com.client.Dispatch('Word.Application')
    doc = word.Documents.Open(inputFile)
    doc.SaveAs(outputFile, FileFormat=wdFormatPDF)
    doc.Close()
    word.Quit()
    Quelle piste me conseilleriez-vous ?
    Merci d'avance.
    Bruno

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Bordeaux
    Inscrit en
    Juillet 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Bordeaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2012
    Messages : 24
    Points : 36
    Points
    36
    Par défaut Conversion format
    Bonjour,
    Sous Ubuntu 20, LibreOffice installé, la ligne de commande suivante convertit un document Tension.rtf (créé pour l'occasion avec Writer) contenant texte et images, en Tension.pdf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    soffice --convert-to pdf Tension.rtf
    J'ai essayé une seule page simple.
    Mais ce n'est plus du Python...
    Bonne journée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Médecin
    Inscrit en
    Avril 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Merci Brunop33,
    Je vais essayer dans cette direction, pas eu trop le temps de m'y pencher cette semaine, la fin de la prochaine sera un peu plus tranquille !
    Je mettrai un mot si j'ai avancé dans ce sens, et toujours amateur d'autres idées !
    Bon WE

  4. #4
    Membre à l'essai
    Homme Profil pro
    Médecin
    Inscrit en
    Avril 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Médecin
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2017
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Bonjour à tous,
    Citation Envoyé par brunop33 Voir le message
    Bonjour,
    Sous Ubuntu 20, LibreOffice installé, la ligne de commande suivante convertit un document Tension.rtf (créé pour l'occasion avec Writer) contenant texte et images, en Tension.pdf:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    soffice --convert-to pdf Tension.rtf
    J'ai essayé une seule page simple.
    Mais ce n'est plus du Python...
    J'ai résolu mon problème en suivant tes conseils, brunop33, et après quelques recherches. La fonction suivante me permet de convertir mon rtf en pdf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def convert_to_pdf(input_rtf, rep_sortie):
        # en entrée chemin et nom du fichier rtf dans input_rtf, répertoire pour le fichier pdf résultant dans rep_sortie
        cheminLibreOffice = r"C:\Program Files\LibreOffice\program\soffice.exe"
        p = Popen([cheminLibreOffice, '--headless', '--convert-to', 'pdf', '--outdir', rep_sortie, input_rtf])
        p.communicate()
    Cela fonctionne très bien, mais il y a un délai d'appel à LibreOffice d'environ deux secondes, ce n'est pas rédhibitoire, mais un peu pénible.

    Avant de passer le problème en résolu, j'aurais aimé reposer la question de savoir si l'un d'entre vous connaît une librairie permettant ce type de conversion (rtf->pdf, ou rtf->format image) plus rapidement.
    Dans tous les cas, merci à brunop33 et bonne soirée à tous.

    Bruno

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Affichage de la date et de l'heure dans un Canvas Tkinter
    Par Alex73160 dans le forum Tkinter
    Réponses: 10
    Dernier message: 19/12/2017, 15h55
  2. [AC-2010] Affichage de l'historique d'un champ mémo dans un formulaire
    Par delphin4512 dans le forum Access
    Réponses: 0
    Dernier message: 27/11/2015, 11h01
  3. affichage de la première page d'un multipage
    Par xadep dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/09/2009, 12h29
  4. Réponses: 4
    Dernier message: 06/02/2009, 10h07
  5. Affichage de la première page dans le viewer
    Par GP77 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 16/02/2007, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo