Faire bonne impression avec Python
Faire bonne impression avec Python
Faire bonne impression avec Python
#! /usr/bin/env python
import os
Sous Windows
Python dispose de riches extensions pour cette plate-forme. Les
Python
NIVEAU : DÉBUTANT
extensions Windows ne font pas partie du package Python de
base et sont donc à télécharger séparément à
http://www.python.org. Parmi ces extensions vient Pythonwin, qui
est une librairie enveloppe autour de la librairie C++ MFC de Micro-
60 soft. MFC est un ensemble de classes plus ou moins bien conçues,
pd.SetPrinterCommand('lpr')
est difficile et un peu à part, mais nous avons toutefois une bonne
solution avec wxPython. wxPython est une librairie de classes
> Figure 3: L'organisation interne de Word 2000 selon la MSDN.
Python, enveloppant les classes C++ de l'excellente librairie
wxWindows, que j'ai déjà eu l'occasion de vous présenter. wxPy-
import os
thon est sous licence GPL. Vous pouvez le télécharger à
http://www.wxpython.org. wxPython fonctionne à merveille sous if os.name == "posix":
Windows, UNIX et Linux. # c'est UNIX Linux
if os.name in ['nt', 'dos', 'ce']:
# c'est Windows
Python
NIVEAU : DÉBUTANT
Deux choses à noter : En mode MM_POINT, les sens des ordon-
nées diffère de MFC à wxPython : négatif vers le bas avec MFC,
positif vers le bas avec wxPython. Enfin, notez la destruction du
62 DC par del dc, comme précédemment.
La deuxième méthode, plus complexe, permet aussi une meilleure def OnPrintBouton(self, event):
gestion des pages. L'encadré 2 en présente le listing complet. En pd = wxPrintData()
pd.SetPrinterName('')
dehors de l'initialisation de wxPrintData et wxPrintDialogData, qui
pd.SetOrientation(wxPORTRAIT)
fait partie des meubles, on utilise cette fois un objet wxPrinter, pd.SetPaperId(wxPAPER_A4)
dont la méthode Print s'attend à recevoir un objet dérivant de pd.SetQuality(wxPRINT_QUALITY_DRAFT)
wxPrintout. Cette classe dérivée DOIT surcharger quatre méthodes : pd.SetColour(false) # impression noir et blanc
pd.SetNoCopies(1)
• le constructeur dans lequel on appelle le constructeur de base.
pd.SetCollate(true)
• HasPage. Tant que cette méthode renvoie true, la fonction call-
back OnPrintPage est automatiquement appelée.
pdd = wxPrintDialogData()
• GetPageInfo, qui retourne un tuple contenant les premières, der- pdd.SetPrintData(pd)
nières pages et le début et la fin de l'impression. pdd.SetSetupDialog(false)
pdd.SetMinPage(1)
pdd.SetMaxPage(1)
pdd.SetFromPage(1)
pdd.SetToPage(1)
pdd.SetPrintToFile(false)
printer = wxPrinter(pdd)
monprintout = MonPrintout("mon objet d'impression")
printer.Print(self, monprintout, true)
> Figure 4: Sous Linux, tout finit par aboutir dans la file d'impression.
class App(wxApp):
def OnInit(self):
• OnPrintPage, dans laquelle sont effectués les travaux d'impres- frame = MainWindow(None, -1, "Demo d'impression avec wxPython")
sion proprement dits. Ici le DC obtenu est préfabriqué par la
self.SetTopWindow(frame)
classe et NE DOIT PAS être libéré par le programmeur. Cette
frame.Show(true)
méthode doit retourner 'true'. Si elle retourne false, le job d'im- return true
pression est annulé. ■
Frédéric Mazué app = App(0)
fmazue@programmez.com app.MainLoop() 63