[pyar] Imprimir factura

Julio César Gázquez julio_lists en mebamutual.com.ar
Jue Nov 22 10:08:18 ART 2012


El 21/11/12 18:55, Fernando Gonzalez escribió:
> Hola a todos estoy codificando en python + pyqt4 + sqlite3 un pequeño 
> sistema comercial, ahora necesito imprimir los comprobantes de venta o 
> remitos, ordenes de pago, etc. Estuve viendo el reportlab, pero genera 
> pdf y es un poco molesto abrir el pdf, e imprimirlo manualmente, en 
> visual basic esta el objeto printer que me permite imprimir reportes 
> directamente, estuve viendo el qprinter pero no encontre ningún 
> ejemplo mas o menos claro (para dumys:), en python no hay algo parecido?
>
> desde ya muchas gracias
>
Hola Fernando.

Mi ideal al respecto es usar python-poppler-qt4.

Lamentablemente al ser un binding bastante chico e independiente de 
PyQt4 (si un día Qt incorpora Poppler de forma que termine siendo 
soportado directamente por PyQt y PySide bailo en una pata) siempre tuvo 
varias personas manteniendo copias independientes (entre ellas Roberto 
Alsina). Pero hace un tiempo un flaco tomó la posta de mantenerlo más 
seriamente (no digo que lo haya cumplido):

http://code.google.com/p/python-poppler-qt4/

En cuanto al soporte Windows, hay por lo menos un instalador para Windows:

https://home.in.tum.de/~lorenzph/python-poppler-qt4/

A continuación mi código para imprimir. Tengo hecho también un form de 
vista en pantalla, si te sirve te lo paso.

from PyQt4 import QtGui
try:
     import QtPoppler
except ImportError:
     try:
       import popplerqt4 # Nombre alternativo del módulo
       QtPoppler = popplerqt4
     except ImportError:
       pass



def printpdf(reportfile,printer):

         #dpi=printer.resolution()
         #print dpi
         #if dpi>300:
         dpi=300
         printer.setResolution(300)

         doc = QtPoppler.Poppler.Document.load(reportfile)
         painter = QtGui.QPainter()
         painter.begin(printer)
         progress=QtGui.QProgressDialog (u"Imprimiendo...", u"Cancelar", 
0, doc.numPages())
         progress.open()
         try:
             for i in range(0,doc.numPages()):
                 if i>0: printer.newPage()
                 page = doc.page(i)
                 painter.drawImage(0, 0, page.renderToImage(dpi,dpi))
                 del page
                 progress.setValue(i)

             painter.end()
         except:
             printer.abort()
             raise



Saludos!




More information about the pyar mailing list