Ejemplo n.º 1
0
def task():  # 获取默认打印机的工作状态
    printer_name = win32print.GetDefaultPrinter()
    print(WHERE, "默认打印机", printer_name)
    handle_printer = win32print.OpenPrinter(printer_name)  # 获取打印机句柄
    printer_info = win32print.GetPrinter(handle_printer, 2)  # 调用相关函数进行信息查询
    task_list = win32print.EnumJobs(handle_printer, 0, 10)  # 参数(句柄,编文档号,枚举条数)
    return printer_info["cJobs"]  # 获取当前打印机任务数目
def printer_watchdog():
    DEFAULT_LOCALE_ENCODING = get_system_encoding()
    print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)  # get local printers
    print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS)  # get printers which other computer shared

    default_printer_name = win32print.GetDefaultPrinter()

    printer = win32print.OpenPrinter(default_printer_name)
    print win32print.GetPrinter(printer)

    jobs_list = list()
    total_seconds = 60 * 5  # reset after 60*5 seconds
    sleep_seconds = 10
    times = total_seconds / sleep_seconds
    current_times = 0
    while True:
        jobs = win32print.EnumJobs(printer, 0, 3, 1)
        # 0 is location of first job,
        # 3 is number of jobs to enumerate,
        # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :(
        if len(jobs) >= 1:
            for job in jobs:
                print job.get('pUserName'), job.get('Submitted'), job.get('pMachineName'), \
                    job.get('pDocument').decode(DEFAULT_LOCALE_ENCODING)
                jobs_list.append(job.get('JobId', -1))
            if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]):
                current_times += 1
            if current_times > times:
                print "printer need to be reset, ... "
                reset_printer()
                jobs_list = []  # make sure there are not same job id in list
                current_times = 0
        print 'looks good'
        time.sleep(sleep_seconds)
Ejemplo n.º 3
0
def printer_errorneous_state(printer, error_states=PRINTER_ERROR_STATES):
    prn_opts = win32print.GetPrinter(printer)
    status_opts = prn_opts[18]
    for error_state in error_states:
        if status_opts & error_state:
            return error_state
    return 0
    def begin_document(self, desc="MSWinPrint.py print job"):

        # open the printer
        if self.printer is None:
            self.printer = win32print.GetDefaultPrinter()
        self.hprinter = win32print.OpenPrinter(self.printer)

        # load default settings
        devmode = win32print.GetPrinter(self.hprinter, 8)["pDevMode"]

        # change paper size and orientation
        if self.papersize is not None:
            devmode.PaperSize = paper_sizes[self.papersize]
        if self.orientation is not None:
            devmode.Orientation = orientations[self.orientation]

        # create dc using new settings
        self.hdc = win32gui.CreateDC("WINSPOOL", self.printer, devmode)
        self.dc = win32ui.CreateDCFromHandle(self.hdc)

        # self.dc = win32ui.CreateDC()
        # if self.printer is not None:
        #     self.dc.CreatePrinterDC(self.printer)
        # else:
        #     self.dc.CreatePrinterDC()

        self.dc.SetMapMode(win32con.MM_TWIPS)  # hundredths of inches
        self.dc.StartDoc(desc)
        self.pen = win32ui.CreatePen(0, int(scale_factor), 0L)
        self.dc.SelectObject(self.pen)
        self.page = 1
Ejemplo n.º 5
0
def printImage(printer_name,
               bmp,
               paperSize=win32con.DMPAPER_A4,
               tray=None,
               jobTitle="Untitled"):
    """
    Функция печати изображения по входным параметрам:
    :param printer_name: имя принтера в windows
    :param img:
    :param paperSize:
    :param tray:
     пример использования печати на принтере по-умолчанию на формате А4. Источник бумаги - лоток А4
     printImage(win32print.GetDefaultPrinter(),filename,win32con.DMPAPER_A4,XEROX_A4_TRAY)
    """
    PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
    hprinter = win32print.OpenPrinter(printer_name, PRINTER_DEFAULTS)
    properties = win32print.GetPrinter(hprinter, 2)
    pr = properties['pDevMode']
    if paperSize == win32con.DMPAPER_A2:
        pr.Orientation = win32con.DMORIENT_LANDSCAPE
    pr.PaperSize = paperSize

    if tray:
        pr.DefaultSource = tray
    properties['pDevMode'] = pr
    try:
        win32print.SetPrinter(hprinter, 2, properties, 0)
    except pywintypes.error, err:
        logger.error(err[2].decode('cp1251').encode('utf-8'))
        sys.exit()
Ejemplo n.º 6
0
    def ImprimirArquivo(numeroPedido,
                        event=None):  #Função para Imprimir o Pedido
        try:

            # Definindo o caminho do arquivo para impressão
            arquivo = "C:/Users/Itamar/Documents/GitHub/Sistema-Scripts/pedidos/Pedido" + str(
                numeroPedido) + '.txt'
            _printer = StringVar(Pedidos_window)
            # Setando a impressora padrão do windows
            _printer.set(win32print.GetDefaultPrinter())
            #print(_printer)

            PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
            pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS)
            properties = win32print.GetPrinter(pHandle, 2)
            win32print.SetPrinter(pHandle, 2, properties, 0)

            try:
                #win32print.SetDefaultPrinter(_printer.get())
                win32api.ShellExecute(0, "print", arquivo, None, ".", 0)
                win32print.ClosePrinter(pHandle)
            except:
                pass
                messagebox.showerror("Error",
                                     "Não foi passivel imprimir o pedido.")
        except:
            pass
            messagebox.showerror("Error",
                                 "Não foi passivel imprimir o pedido.")
Ejemplo n.º 7
0
def prepPrt2():
    #http://newcenturycomputers.net/projects/pythonicwindowsprinting.html
        
    # if you just want to use the default printer, you need
    # to retrieve its name.
    printer = win32print.GetDefaultPrinter()
    
    # open the printer.
    hprinter = win32print.OpenPrinter(printer)
    
    # retrieve default settings.  this code does not work on
    # win95/98, as GetPrinter does not accept two 
    devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"]
    
    # change paper size and orientation
    # constants are available here:
    # http://msdn.microsoft.com/library/default.asp?
    #      url=/library/en-us/intl/nls_Paper_Sizes.asp
    # number 10 envelope is 20
    devmode.PaperSize = 20
    # 1 = portrait, 2 = landscape
    devmode.Orientation = 2
    
    # create dc using new settings.
    # first get the integer hDC value.  note that we need the name.
    hdc = win32gui.CreateDC("WINSPOOL", printer, devmode)
    # next create a PyCDC from the hDC.
    dc = win32ui.CreateDCFromHandle(hdc)
Ejemplo n.º 8
0
def init_printer():
    name = win32print.GetDefaultPrinter()

    print "printer name: " + name

    # printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_ADMINISTER}
    printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_USE}
    handle = win32print.OpenPrinter(name, printdefaults)

    level = 2
    attributes = win32print.GetPrinter(handle, level)

    print "Old Duplex = %d" % attributes['pDevMode'].Duplex

    # attributes['pDevMode'].Duplex = 1    # no flip
    attributes['pDevMode'].Duplex = 2  # flip up
    # attributes['pDevMode'].Duplex = 3  # flip over

    ## 'SetPrinter' fails because of 'Access is denied.'
    ## But the attribute 'Duplex' is set correctly
    try:
        win32print.SetPrinter(handle, level, attributes, 0)
    except:
        print "win32print.SetPrinter: set 'Duplex'"

    return name, printdefaults, handle, attributes
Ejemplo n.º 9
0
 def test_printer_levels_read_dummy(self):
     if not self.local_printers:
         print("Test didn't run (no local printers)!")
         return
     ph = wprn.OpenPrinter(self.local_printers[self.printer_idx][2])
     for level in self.printer_levels_all:
         wprn.GetPrinter(ph, level)
Ejemplo n.º 10
0
def printer_watchdog():
    print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)  # get local printers
    print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS)  # get printers which other computer shared

    default_printer_name = win32print.GetDefaultPrinter()

    printer = win32print.OpenPrinter(default_printer_name)
    print win32print.GetPrinter(printer)

    jobs_list = list()
    total_seconds = 60 * 5  # reset after 60*5 seconds, see 'known issue 2' in this file.
    sleep_seconds = 10
    times = total_seconds / sleep_seconds
    current_times = 0
    while True:
        jobs = win32print.EnumJobs(printer, 0, 3, 1)
        # except: pywintypes.error: (1722, 'EnumJobs', 'RPC 服务器不可用。'), ignored this except
        # 0 is location of first job,
        # 3 is number of jobs to enumerate,
        # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :(
        if len(jobs) >= 1:
            for job in jobs:
                filename = job.get('pDocument')
                job_id = job.get('JobId', md5(filename).hexdigest())

                job_status = job.get('Status', 0)
                if job_status in [0x00000002, 0x00000004, 0x00000800]:  # JOB_STATUS_ERROR
                    """
                    Refers:
                        https://docs.microsoft.com/en-us/windows/desktop/printdocs/job-info-2
                        ~\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\Include\WinSpool.h
                    """
                    print "printer need to be reset, ... "
                    reset_printer()
                    jobs_list = []  # make sure there are not same job id in list
                    current_times = 0

                print "Current job: ", job_id, job.get('pUserName'), job.get('Submitted'), job.get(
                    'pMachineName'), filename, "[ %d/%d ]" % (times, current_times + 1)
                jobs_list.append(job_id)

            # if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]):
            #     current_times += 1
            if Counter(jobs_list).most_common(1)[0][1] > 1:
                current_times += 1

            if current_times > times:
                """ KNOWN ISSUE 2:
                It will reset when a document sends lots of pages to printer. 
                This script may reset printer before job finished which is not expected.  
                """
                print "printer need to be reset, ... "
                reset_printer()
                jobs_list = []  # make sure there are not same job id in list
                current_times = 0
        else:
            jobs_list = []
            current_times = 0
            print 'looks good, keep watching ...'
        time.sleep(sleep_seconds)
Ejemplo n.º 11
0
def StartPrint (printer='MyPSPrinter',
             path=r'D:\test.txt',
             copies = 1,
            orientation = win32con.DMORIENT_PORTRAIT,
            duplex = win32con.DMDUP_HORIZONTAL,
            printQuality = win32con.DMRES_HIGH,
            color = win32con.DMCOLOR_MONOCHROME,
            paperSize = win32con.DMPAPER_LETTER,  # or DMPAPER_A4
             text=None):
    PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
    h_printer = win32print.OpenPrinter(printer, PRINTER_DEFAULTS)
    properties = win32print.GetPrinter(h_printer, 2)
    devmode = properties["pDevMode"]
    devmode.FormName = 'A4'  # or 'Letter'
    devmode.PaperSize = paperSize
    devmode.Orientation = orientation
    devmode.PrintQuality = printQuality
    devmode.Color = color
    devmode.TTOption = win32con.DMTT_SUBDEV
    devmode.Scale = 100
    devmode.Copies = copies
    devmode.Duplex =duplex
    devmode.Fields |= (win32con.DM_FORMNAME |
                       win32con.DM_PAPERSIZE |
                       win32con.DM_ORIENTATION |
                       win32con.DM_PRINTQUALITY |
                       win32con.DM_COLOR |
                       win32con.DM_TTOPTION |
                       win32con.DM_SCALE)
    properties['pDevMode'] =devmode
    win32print.SetPrinter(h_printer, 2, properties, 0)
    win32print.SetDefaultPrinter(printer)

    try:
        listOfFiles = os.listdir(path)
        if (len(listOfFiles)!=0):
            for file in listOfFiles:
                filename = path+'\\'+file
                print(filename)
                print(win32api.ShellExecute(
                   0,
                   "printto",
                   filename,
                   '"%s"' % win32print.GetDefaultPrinter(),
                   ".",
                   0
                ))
                print_jobs = win32print.EnumJobs(h_printer, 0, -1, 2)
                delete = True
                while (delete):
                    old_print_jobs = print_jobs
                    print_jobs = win32print.EnumJobs(h_printer, 0, -1, 2)
                    if((len(print_jobs) == 0) & (len(old_print_jobs)!=0)):
                        print('ok')
                        delete = False
                        filename = path+'\\'+file
                        os.remove(filename)
    except FileNotFoundError:
        print('Directory not created.')
Ejemplo n.º 12
0
def get_printer_info(name):
    printer = win32print.OpenPrinter(name)
    try:
        printer_info = win32print.GetPrinter(printer)
    finally:
        win32print.ClosePrinter(printer)

    return printer_info
Ejemplo n.º 13
0
 def EnumPrinter(self):
     handle = win32print.OpenPrinter(self.printer_name)
     win32print.GetPrinter(handle)
     win32print.ClosePrinter(handle)
     printers = []
     for p in win32print.EnumPrinters(2):
         printers.append(p[1].split(',')[0])
     return printers
Ejemplo n.º 14
0
def printdoc(filename):
    handle = win32print.OpenPrinter(win32print.GetDefaultPrinter())
    status1 = 1024  # 初始化为1024表示忙 0是空闲状态
    status2 = 2  # 打印机队列数
    while (status1 == 1024) and (status2 >= 2):
        statusqueue = (win32print.GetPrinter(handle))
        status1 = statusqueue[-3]
        status2 = statusqueue[-2]
        print("    等待中,打印队列" + str(status2) + "文档")
        time.sleep(1)
        continue
    print("开始打印" + filename)
    win32api.ShellExecute(0, 'print', filename, win32print.GetDefaultPrinterW(), ".", 0)
    while ((win32print.GetPrinter(handle)[-2]) != (status2 +1)):
        time.sleep(1)
        print("等待打印机反馈")
    os.remove(filename)
Ejemplo n.º 15
0
    def PrinterReady(self):
        if self.hPrinter == None:
            return False

        t = win32print.GetPrinter(self.hPrinter)

        if t[18] == 0:
            return True
        else:
            #            print "printer not ready %d" % t[18]
            return False
def printer_watchdog():
    # DEFAULT_LOCALE_ENCODING = get_system_encoding()
    print win32print.EnumPrinters(
        win32print.PRINTER_ENUM_LOCAL)  # get local printers
    print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS
                                  )  # get printers which other computer shared

    default_printer_name = win32print.GetDefaultPrinter()

    printer = win32print.OpenPrinter(default_printer_name)
    print win32print.GetPrinter(printer)

    jobs_list = list()
    total_seconds = 60 * 5  # reset after 60*5 seconds, see 'known issue 2' in this file.
    sleep_seconds = 10
    times = total_seconds / sleep_seconds
    current_times = 0
    while True:
        jobs = win32print.EnumJobs(printer, 0, 3, 1)
        # 0 is location of first job,
        # 3 is number of jobs to enumerate,
        # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :(
        if len(jobs) >= 1:
            for job in jobs:
                filename = job.get('pDocument')
                job_id = job.get('JobId', md5(filename).hexdigest())
                print "Current job: ", job_id, job.get('pUserName'), job.get(
                    'Submitted'), job.get(
                        'pMachineName'), filename, "[ %d/%d ]" % (
                            times, current_times + 1)
                jobs_list.append(job_id)

            # if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]):
            #     current_times += 1
            if Counter(jobs_list).most_common(1)[0][1] > 1:
                current_times += 1

            if current_times > times:
                """ KNOWN ISSUE 2:
                It will reset when a document sends lots of pages to printer. 
                This script may reset printer before job finished which is not expected.  
                """
                print "printer need to be reset, ... "
                reset_printer()
                jobs_list = []  # make sure there are not same job id in list
                current_times = 0
        else:
            jobs_list = []
            current_times = 0
            print 'looks good, keep watching ...'
        time.sleep(sleep_seconds)
Ejemplo n.º 17
0
def prepPrt(): 
    # Setting paper tray
    PRINTER_DEFAULTS = {"DesiredAccess":win32print.PRINTER_ALL_ACCESS}
    pHandle = win32print.OpenPrinter('RICOH-LOCAL', PRINTER_DEFAULTS)
    properties = win32print.GetPrinter(pHandle, 2)  #get the properties
    pDevModeObj = properties["pDevMode"]            #get the devmode
    tray_one = 1
    tray_two = 3
    tray_three = 2
    printer_tray = []
    automaticTray = 7
    pDevModeObj.DefaultSource = tray_two            #set the tray
    properties["pDevMode"]=pDevModeObj              #write the devmode back to properties
    win32print.SetPrinter(pHandle,2,properties,0)   #save the properties to the printer
Ejemplo n.º 18
0
def set_duplex(printer_no, duplex):
    print_defaults = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
    handle = win32print.OpenPrinter(app_config.PRINTER_NAMES[printer_no],
                                    print_defaults)
    level = 2
    attributes = win32print.GetPrinter(handle, level)
    attributes['pDevMode'].Duplex = duplex
    try:
        win32print.SetPrinter(handle, level, attributes, 0)
    except Exception as e:
        print('Failed to set duplex')
        print(e)
    finally:
        win32print.ClosePrinter(handle)
Ejemplo n.º 19
0
def cfgPrt(selPrt):

    p = win32print.OpenPrinter(selPrt)
    printprocessor = win32print.GetPrinter(p, 2)['pPrintProcessor']
    dmsize = win32print.DocumentProperties(0, p, selPrt, None, None, 0)
    driverextra = dmsize - pywintypes.DEVMODEType().Size
    dm = pywintypes.DEVMODEType(driverextra)
    dm.Fields = dm.Fields | win32con.DM_ORIENTATION | win32con.DM_COPIES  #|win32con.DM_PAPERSIZE
    dm.Orientation = win32con.DMORIENT_LANDSCAPE
    dm.Copies = 1
    #dm.Papersize=win32con.DM_PAPERLENGTH(790)
    #dm.Paperwidth=530
    win32print.DocumentProperties(
        0, p, selPrt, dm, dm, win32con.DM_IN_BUFFER | win32con.DM_OUT_BUFFER)
    hDC = win32gui.CreateDC(printprocessor, selPrt, dm)
    printerwidth = win32ui.GetDeviceCaps(hDC, 110)
    printerheight = win32ui.GetDeviceCaps(hDC, 111)
Ejemplo n.º 20
0
    def SetPrinter(self, printer, isPortrait):
        self.printer_name = printer
        # self.printer_name = 'Microsoft Print to PDF'
        # self.printer_name = 'HP LaserJet MFP M28-M31 PCLm-S (Network)'
        self.device = win32print.OpenPrinter(printer)
        self.devmode = win32print.GetPrinter(self.device, 2)["pDevMode"]

        print('paper size:', self.devmode.PaperSize)
        # http://timgolden.me.uk/pywin32-docs/PyDEVMODE.html
        # 1 = portrait, 2 = landscape
        self.devmode.Orientation = 1 if isPortrait else 2
        self.devmode.PaperSize = 10  # A4 = 10
        # self.devmode.PaperLength = 4
        # self.devmode.PaperWidth = 4

        self.hdc = win32gui.CreateDC("WINSPOOL", self.printer_name,
                                     self.devmode)
        self.dc = win32ui.CreateDCFromHandle(self.hdc)
Ejemplo n.º 21
0
def get_printer_stats():
    data = get_printers()
    offline_data = []
    for tup in data:
        handle = win32print.OpenPrinter(tup[2], {"DesiredAccess": win32print.PRINTER_ALL_ACCESS})
        try:
            status = win32print.GetPrinter(handle)
            if status[18] >= 8192:
                offline_data.append(1)
            else:
                offline_data.append(0)
        except Exception as e:
            print(e)
    count_1 = offline_data.count(1)
    count_0 = offline_data.count(0)
    if count_1 > count_0:
        return 1
    return 0
Ejemplo n.º 22
0
def do_print_qu():
    str1=current_textarea.get("0.0","end")
    pname=win32print.GetDefaultPrinter()
    pHandle=win32print.OpenPrinter(pname)
    printinfo=win32print.GetPrinter(pHandle,2)

    pDevModeObj=printinfo["pDevMode"]
    pDevModeObj.Scale=100

    DC=win32gui.CreateDC("WINSPOOL",pname,pDevModeObj)
    hDC= win32ui.CreateDCFromHandle(DC)

    hDC.StartDoc("Python Editor")
    hDC.StartPage()
    hDC.TextOut(20,20,str1)
    hDC.EndPage()
    hDC.EndDoc()

    win32gui.DeleteDC(DC)
Ejemplo n.º 23
0
def prepPrtTray():
    
    # Constants from wingdi.h
    DM_OUT_BUFFER = 0x02
    DM_IN_BUFFER = 0x08
    DM_IN_PROMPT = 0x04
    DM_DEFAULT_SOURCE = 0x200
    
    # Get a handle for the default printer
    device_name = win32print.GetDefaultPrinter()
    handle = win32print.OpenPrinter(device_name)
    
    # Get the default properties for the printer
    properties = win32print.GetPrinter(handle, 2)
    devmode = properties['pDevMode']
    
    # Print the default paper source (prints '7' for 'Automatically select')
    print(devmode.DefaultSource)
    
    # Change the default paper source to '4' for 'Manual feed'
    devmode.DefaultSource = 4
    devmode.Fields = devmode.Fields | DM_DEFAULT_SOURCE
    
    # Write these changes back to the printer
    win32print.DocumentProperties(None, handle, device_name, devmode, devmode, DM_IN_BUFFER | DM_OUT_BUFFER)
    
    # Confirm the changes were updated
    print(devmode.DefaultSource)  # Aaargh! Prints '7' again!
    
    # Start printing with the device
    hdc = win32gui.CreateDC('', device_name, devmode)
    win32print.StartDoc(hdc, ('Test', None, None, 0))
    win32print.StartPage(hdc)
    
    # ... GDI drawing commands ...
    
    win32print.EndPage(hdc)
    win32print.EndDoc(hdc)
Ejemplo n.º 24
0
def PrintAction(event=None):

    PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
    pHandle = win32print.OpenPrinter(_printer.get(), PRINTER_DEFAULTS)
    properties = win32print.GetPrinter(pHandle, 2)
    properties['pDevMode'].Color = 1 if str(_color.get()) == "Color" else 2
    properties['pDevMode'].Copies = 1
    win32print.SetPrinter(pHandle, 2, properties, 0)

    if not _filename:
        messagebox.showerror("Error", "No File Selected")
        return
    elif not _printer.get():
        messagebox.showerror("Error", "No Printer Selected")
        return

    try:
        #win32print.SetDefaultPrinter(_printer.get())
        win32api.ShellExecute(0, "print", _filename, None, ".", 0)
        win32print.ClosePrinter(pHandle)
    except:
        pass
        messagebox.showerror("Error",
                             "There was an error printing the file :(")
Ejemplo n.º 25
0
 def get_status(self, **params):
     messages = []
     self.open_printer()
     if not self.device:
         status = "disconnected"
     elif device_type == "serial":
         # Maybe we could do something here to start serial
         status = "connected"
     elif device_type == "usb":
         try:
             if self.is_online():
                 status = "connected"
             else:
                 status = "connecting"
             # if res['printer']['status_error']:
             #     status = 'error'
             #     messages.append(
             #         'Error code: %i' % res['printer']['status_error'])
         except Exception as err:
             status = "error"
             self.device = False
             messages.append("Error: %s" % err)
     else:
         state = win32print.GetPrinter(self.device, 2)
         if state["Status"] in [
                 win32print.PRINTER_STATUS_OFFLINE,
                 win32print.PRINTER_STATUS_NOT_AVAILABLE,
         ]:
             status = "disconnected"
         else:
             status = "connected"
     self.close()
     return {
         "status": status,
         "messages": messages,
     }
Ejemplo n.º 26
0
interface = ShoppingListInterface()

# if you just want to use the default printer, you need
# to retrieve its name.
printer = win32print.GetDefaultPrinter()

# open the printer.
import win32ui
from win32con import DMPAPER_A5, DMPAPER_A5_ROTATED, DMRES_MEDIUM, DMRES_LOW

hprinter = win32print.OpenPrinter('HP Deskjet 2540 series (sieć)')
# hprinter = win32print.OpenPrinter('Microsoft Print to PDF')

# retrieve default settings.  this code does not work on
# win95/98, as GetPrinter does not accept two
devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"]

# change paper size and orientation
# constants are available here:
# http://msdn.microsoft.com/library/default.asp?
#      url=/library/en-us/intl/nls_Paper_Sizes.asp
# number 10 envelope is 20
devmode.PaperSize = DMPAPER_A5
devmode.PrintQuality = 300
# devmode.YResolution = 300
# devmode.XResolution = 300
# devmode.FormName=u'a5'
# 1 = portrait, 2 = landscape
devmode.Orientation = 1

# create dc using new settings.
Ejemplo n.º 27
0
    import base64
    raw_data=base64.b64decode(data)
    if raw_data:
      h = win32print.OpenPrinter(p)
      hJob = win32print.StartDocPrinter (h, 1, ("KwickPOS Ticket", None, "RAW"))
      win32print.StartPagePrinter (h)
      b=win32print.WritePrinter (h, raw_data)
      win32print.EndPagePrinter (h)
      win32print.EndDocPrinter (h)
      win32print.ClosePrinter (h)
      print(b)
      sys.exit()
  else:
    try:
      h = win32print.OpenPrinter(p)
      d = win32print.GetPrinter(h,2)
      win32print.ClosePrinter (h)
      a = d['Attributes']
      hex=hex(a)
      if ( hex[-3] == '6' ):
        print(p+' Offline')
        sys.exit()
      s = d['Status']
      if ( s == 1 ):
        print(p+' Paused')
        sys.exit()
      print(p+' Ready')
    except pywintypes.error:
      print(p+' No Such Printer')
else:
  import json
Ejemplo n.º 28
0
def rtrvPrtInfo(handle, level=2):
    return win32print.GetPrinter(handle, level), level
Ejemplo n.º 29
0
import win32print, pywintypes, win32con, win32gui, win32api

pname = win32print.GetDefaultPrinter()
print(pname)
p = win32print.OpenPrinter(pname)
print('Printer handle: ', p)
print_processor = win32print.GetPrinter(p, 2)['pPrintProcessor']
## call with last parm set to 0 to get total size needed for printer's DEVMODE
dmsize = win32print.DocumentProperties(0, p, pname, None, None, 0)
## dmDriverExtra should be total size - fixed size
driverextra = dmsize - pywintypes.DEVMODEType(
).Size  ## need a better way to get DEVMODE.dmSize
dm = pywintypes.DEVMODEType(driverextra)
dm.Fields = dm.Fields | win32con.DM_ORIENTATION | win32con.DM_COPIES
dm.Orientation = win32con.DMORIENT_LANDSCAPE
dm.Copies = 2
win32print.DocumentProperties(0, p, pname, dm, dm,
                              win32con.DM_IN_BUFFER | win32con.DM_OUT_BUFFER)

pDC = win32gui.CreateDC(print_processor, pname, dm)
printerwidth = win32print.GetDeviceCaps(pDC, win32con.PHYSICALWIDTH)
printerheight = win32print.GetDeviceCaps(pDC, win32con.PHYSICALHEIGHT)

hwnd = win32gui.GetDesktopWindow()
l, t, r, b = win32gui.GetWindowRect(hwnd)
desktopheight = b - t
desktopwidth = r - l
dDC = win32gui.GetWindowDC(hwnd)

dcDC = win32gui.CreateCompatibleDC(dDC)
dcBM = win32gui.CreateCompatibleBitmap(dDC, desktopwidth, desktopheight)
Ejemplo n.º 30
0
import win32con


#because we use MM_TWIPS:
inch = 1440.0
mm = inch / 25.4

jobName="test"
printerName=win32print.GetDefaultPrinter()
spoolFile=r"c:\tmp.ps"

# open the printer.
hprinter = win32print.OpenPrinter(printerName)
# retrieve default settings.  this code has complications on
# win95/98, I'm told, but I haven't tested it there.
props = win32print.GetPrinter(hprinter,2)
devmode=props["pDevMode"]

if devmode is None:
    # workaround, see http://lino.saffre-rumma.ee/news/477.html
    print "%r has no pDevMode property" % props
else:
    # change paper size and orientation
    # constants are available here:
    # http://msdn.microsoft.com/library/default.asp?\
    # url=/library/en-us/intl/nls_Paper_Sizes.asp
    devmode.PaperSize = win32con.DMPAPER_A4
    devmode.Orientation = win32con.DMORIENT_PORTRAIT

# create dc using new settings.
# first get the integer hDC value.