2011-06-13 25 views

Respuesta

2

Parece que usted está utilizando Windows, así que vamos a empezar con eso - la respuesta cambia si estás usando Linux.

Hay dos formas de imprimir en Windows. La primera forma más común es enviar comandos de dibujo individuales a través de la interfaz GDI de Windows. Para hacer esto, debe colocar cada elemento individual en la página en su ubicación correcta (cadenas de texto, imágenes y formas) mientras selecciona los colores y fuentes apropiados. Fácil si está generando los datos usted mismo, mucho más difícil si tiene que analizar un archivo que está leyendo.

La otra opción es enviar a la impresora en modo "en bruto", donde el controlador de la impresora esencialmente se pasa por alto. Para que esto funcione, la impresora debe comprender de forma nativa la secuencia de bytes que le suministra. Hay algunas impresoras que entienden Postscript de forma nativa, pero no estoy seguro acerca de PDF, y PRN no es un formato estándar.

que nunca he hecho la impresión en bruto a través de Python a mí mismo, pero aquí hay un enlace a un corto fragmento de código de muestra (y una idea de los problemas a esperar): http://bytes.com/topic/python/answers/512143-printing-raw-postscript-data-windows

0
import wx 
import win32api 
import win32print 
class ComboBoxFrame(wx.Frame): 
    def __init__(self): 
     # creates a drop down with the list of printers available 
     wx.Frame.__init__(self, None, -1, 'Printers', size=(350, 300)) 
     panel = wx.Panel(self, -1) 
     list=[] 
     #Enum printers returns the list of printers available in the network 
     printers = win32print.EnumPrinters(
      win32print.PRINTER_ENUM_CONNECTIONS 
      + win32print.PRINTER_ENUM_LOCAL) 
     for i in printers: 
      list.append(i[2]) 
     sampleList = list 
     wx.StaticText(panel, -1, "Please select one printer from the list of printers to print:", (15, 15)) 
     self.combo =wx.ComboBox(panel, -1, "printers", (15, 40), wx.DefaultSize,sampleList, wx.CB_READONLY) 
     btn2 = wx.Button(panel, label="Print", pos=(15, 60)) 
     btn2.Bind(wx.EVT_BUTTON, self.Onmsgbox) 
     self.Centre() 
     self.Show() 

    def Onmsgbox(self, event): 
     filename='duplicate.docx' 
     # here the user selected printer value will be given as input 
     #print(win32print.GetDefaultPrinter()) 
     win32api.ShellExecute (
      0, 
      "printto", 
      filename, 
      '"%s"' % self.combo.GetValue(), 
      ".", 
      0 
     ) 
     print(self.combo.GetValue()) 


if __name__ =='__main__': 
    app = wx.App() 
    ComboBoxFrame().Show() 
    app.MainLoop() 
+0

Un volcado de código, que puede ser técnicamente correcto, no necesariamente ayuda al OP o a los visitantes futuros. Completaría la respuesta explicando el código, incluso los comentarios dentro del código son útiles. – Bugs

Cuestiones relacionadas