Python

2011-06-13 50 views
6

ile USB yazıcıya bir yazdırma işi gönderin PDF, PRN veya PS dosyası ile başlayabilirim. Python kullanarak bir USB yazıcısına nasıl gönderirim? Hangi modülü kullanmaya başlamalıyım?Python

+0

Bu gerçekten bir sorudur süper kullanıcı sitesi. – Keith

+3

"USB" sorusunu değiştirmiş gibi söylüyorsunuz. –

+9

@Ignacio: Belki de olduğunu düşündü. Hepimiz öğrenmek için buradayız. – mpen

cevap

1

olarak bildiğim kadarıyla, bunlar mevcut iki paketi: Windows kullanıyorsanız, o yüzden bununla başlayalım gibisin

  1. pkipplib
  2. win32print
2

geliyor - Linux kullanıyorsanız, cevaplar değişir.

Windows'da yazdırmanın iki yolu vardır. İlk en yaygın yol Windows GDI arayüzü üzerinden bireysel çizim komutları göndermektir. Bunu yapmak için, uygun renkleri ve yazı tiplerini seçerken, sayfadaki her bir öğeyi uygun konuma (metin dizeleri, görüntüler ve şekiller) yerleştirmeniz gerekir. Verileri kendiniz oluşturuyorsanız, okumakta olduğunuz bir dosyayı ayrıştırmanız gerekiyorsa çok daha kolay.

Diğer seçenek, yazıcı sürücüsünün esasen baypas edildiği "ham" modda yazıcıya göndermektir. Bunun çalışması için yazıcı, beslediğiniz bayt akışını doğal olarak anlamalıdır. Postscript'i yerel olarak anlayan bazı yazıcılar var, ancak PDF konusunda emin değilim ve PRN standart bir format değil.

Python kendimi çiğ baskı yaptık, ama burada örnek kısa bir kod pasajı bir bağlantı (ve beklemek sorunların bir fikir) var hiç: 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

Teknik olarak doğru olabileceğinden emin olunan bir kod dökümü, OP'ye veya gelecekteki ziyaretçilere yardımcı olmamalıdır. Ben kodu açıklayarak cevap dışarı engellerdi, hatta kod içinde yorumlar yararlıdır. – Bugs