[RESOLU] Imprimer avec pyQt

Imprimer avec pyQt [RESOLU] - Python - Programmation

Marsh Posté le 24-02-2008 à 13:50:35    

Bonjour
 
Je suis en phase de développement d'un petit projet Python/PyQt et j'arrive à la partie impression. Là, je me trouve confronté à un petit problème. Comment imprimer
 
En fouillant internet, je suis arrivé à ce super article http://www.openvet.org/files/impre [...] python.pdf Il donne divers exemples dont ce premier

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3. import win32ui
  4. dc=win32ui.CreateDC()
  5. dc.CreatePrinterDC()
  6. dc.StartDoc("Impression avec Python" )
  7. dc.StartPage()
  8. dc.TextOut(100, 100, "Bonjour1" )
  9. dc.TextOut(200, 200, "Bonjour2" )
  10. dc.TextOut(300, 3000, "Bonjour3" )
  11. dc.EndPage()
  12. dc.EndDoc()


Exemple sympa qui m'envoie 3 lignes sur mon imprimante.  
 
Ensuite je tombe sur celui-là (mais qui ne fonctionne pas à cause de "Word.Application.9" qui a peut-être changé) .

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3. from win32com.client import Dispatch, constants
  4. import sys
  5. word=Dispatch("Word.Application.9" )
  6. doc=word.Document.Open(sys.argv[0])
  7. word.Visible=1
  8. doc.PrintOut()
  9. word.Quit()


 
Puis l'article parle de wxpython qui gère aussi les impressions donc je me dis qu'il doit y avoir un truc équivalent avec Qt et j'arrive sur le QPrinter et le QPrintDialog. Je tape rapido le code suivant

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3. import sys
  4. from PyQt4.QtCore import *
  5. from PyQt4.QtGui import *
  6. Appli=QApplication(sys.argv)
  7. printer=QPrinter()
  8. dialog = QPrintDialog(printer)
  9. dialog.setModal(True)
  10. dialog.setWindowTitle("Print Document" )
  11. # dialog.addEnabledOption(QAbstractPrintDialog.PrintSelection)
  12. print dialog.exec_()


 
Qui me montre une superbe fenêtre de choix d'imprimante. Ensuite ben là il me manque plusieurs étapes

  • comment créer le fichier à imprimer (ce serait bien si je pouvais le créer en PDF)
  • comment envoyer ledit fichier à l'imprimante sélectionnée


Je sens que je suis pas loin de la soluce mais si qqun pouvait me donner un coup de pouce ce serait sympa.
 
Voilà.


Message édité par Sve@r le 29-02-2008 à 16:19:13

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 24-02-2008 à 13:50:35   

Reply

Marsh Posté le 24-02-2008 à 14:07:14    

Salut,
 
As-tu déjà lu la page Printing with Qt? Ca devrait répondre à tes 2 questions :)

Reply

Marsh Posté le 24-02-2008 à 17:31:33    

IrmatDen a écrit :

Salut,
 
As-tu déjà lu la page Printing with Qt? Ca devrait répondre à tes 2 questions :)


 
Ben oui car c'est là que j'ai trouvé le 3° exemple que j'ai tapé. En fait, il me manque diverses étapes qui sont
- création du fichier (est-ce à moi de le faire ou bien Qt m'offre-t-il un outil pour ça)
- association entre le QPrinter et le QPrintDialog. Comment envoyer le fichier dans l'imprimante sélectionnée. Faut-il d'abord le convertir en un format adapté à l'imprimante ou bien est-ce elle qui s'occupe de tout.
 
Bref il me manque la façon de combler le vide entre ces outils. Et je ne trouve aucun exemple dans les exemples Qt...
 
[EDIT] Je crois que je viens de comprendre => Il me faut un QTextDocument et appeler la méthode "print()" en y passant le printer en paramètre...
 

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3.  
  4. import sys
  5. from PyQt4.QtCore import *
  6. from PyQt4.QtGui import *
  7.  
  8. Appli=QApplication(sys.argv)
  9. printer=QPrinter()
  10.  
  11. doc=QTextDocument("Hello" )
  12. dialog = QPrintDialog(printer)
  13. dialog.setModal(True)
  14. dialog.setWindowTitle("Print Document" )
  15. # dialog.addEnabledOption(QAbstractPrintDialog.PrintSelection)
  16. if dialog.exec_() == True:
  17.     doc.print_(printer)


 
Je pense que je tiens le bon bout...

Message cité 1 fois
Message édité par Sve@r le 24-02-2008 à 18:07:03

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-02-2008 à 00:31:00    

Sve@r a écrit :

- création du fichier (est-ce à moi de le faire ou bien Qt m'offre-t-il un outil pour ça)


Qt peut s'en occuper pour toi. En se référant à la doc de QPrinter::setOutputFileName tu verras que Qt choisis automatiquement le format si possible:

  • QString::null ou QString("" ) => pour l'imprimante
  • nom avec extension .ps => PostScript (Qt 4.2+)
  • nom avec extension .pdf => PDF
  • Tout autre nom/extension => à toi de spécifier le mode avec QPrinter::setOutputFormat
Sve@r a écrit :

- association entre le QPrinter et le QPrintDialog. Comment envoyer le fichier dans l'imprimante sélectionnée. Faut-il d'abord le convertir en un format adapté à l'imprimante ou bien est-ce elle qui s'occupe de tout.


Un QPrinter est un QPaintDevice; tu peux l'utiliser conjointement avec QPainter pour dessiner dessus ce que tu veux. Pour QPrintDialog et QPrinter, QPrintDialog::QPrintDialog prend un QPrinter en paramètre pour que tu n'ais pas à faire correspondre chaque paramètre à la main.
 

Sve@r a écrit :

Bref il me manque la façon de combler le vide entre ces outils. Et je ne trouve aucun exemple dans les exemples Qt...


<Qt>/demos/textedit/textedit.cpp en illustre une utilisation "basique", c'est à dire en utilisant la méthode que tu utilises, à savoir passer par un QTextDocument:

Code :
  1. QPrinter printer(QPrinter::HighResolution);
  2.     printer.setFullPage(true);
  3.     QPrintDialog *dlg = new QPrintDialog(&printer, this);
  4.     if (textEdit->textCursor().hasSelection())
  5.         dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
  6.     dlg->setWindowTitle(tr("Print Document" ));
  7.     if (dlg->exec() == QDialog::Accepted) {
  8.         textEdit->print(&printer);
  9.     }
  10.     delete dlg;


 

Sve@r a écrit :

[EDIT] Je crois que je viens de comprendre => Il me faut un QTextDocument et appeler la méthode "print()" en y passant le printer en paramètre...
 

Code :
  1. #!/usr/bin/env python
  2. # coding: Latin-1 -*-
  3.  
  4. import sys
  5. from PyQt4.QtCore import *
  6. from PyQt4.QtGui import *
  7.  
  8. Appli=QApplication(sys.argv)
  9. printer=QPrinter()
  10.  
  11. doc=QTextDocument("Hello" )
  12. dialog = QPrintDialog(printer)
  13. dialog.setModal(True)
  14. dialog.setWindowTitle("Print Document" )
  15. # dialog.addEnabledOption(QAbstractPrintDialog.PrintSelection)
  16. if dialog.exec_() == True:
  17.     doc.print_(printer)


 
Je pense que je tiens le bon bout...


Effectivement :jap:  
N'oublie pas que tu peux utiliser un certain subset des balises html pour faire de la mise en page pas trop complexe ;)

Reply

Marsh Posté le 29-02-2008 à 16:20:44    

IrmatDen a écrit :


Qt peut s'en occuper pour toi. En se référant à la doc de QPrinter::setOutputFileName tu verras que Qt choisis automatiquement le format si possible:

  • QString::null ou QString("" ) => pour l'imprimante
  • nom avec extension .ps => PostScript (Qt 4.2+)
  • nom avec extension .pdf => PDF
  • Tout autre nom/extension => à toi de spécifier le mode avec QPrinter::setOutputFormat



Compris !
 

IrmatDen a écrit :


<Qt>/demos/textedit/textedit.cpp en illustre une utilisation "basique", c'est à dire en utilisant la méthode que tu utilises, à savoir passer par un QTextDocument:

Code :
  1. QPrinter printer(QPrinter::HighResolution);
  2.     printer.setFullPage(true);
  3.     QPrintDialog *dlg = new QPrintDialog(&printer, this);
  4.     if (textEdit->textCursor().hasSelection())
  5.         dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
  6.     dlg->setWindowTitle(tr("Print Document" ));
  7.     if (dlg->exec() == QDialog::Accepted) {
  8.         textEdit->print(&printer);
  9.     }
  10.     delete dlg;


 


Oui, effectivement c'est là dessus que je me suis basé pour comprendre comment ça marchait...
 

IrmatDen a écrit :


Effectivement :jap:  
N'oublie pas que tu peux utiliser un certain subset des balises html pour faire de la mise en page pas trop complexe ;)


Merci à toi   :bounce:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed