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