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
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.
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()
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)Quelle piste me conseilleriez-vous ?
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()
Merci d'avance.
Bruno
Partager