Пример #1
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.')
Пример #2
0
def clearJobsQueue():
    printer = win32print.OpenPrinter('PDFCreator')
    jobs = win32print.EnumJobs(printer, 0, 100, 2)
    while len(jobs) > 0:
        for currentJob in jobs:
            print '\nDeleting print job with id [' + str(currentJob['JobId']) + ']'
            win32print.SetJob(printer, currentJob['JobId'], 0, None, win32print.JOB_CONTROL_DELETE)
        win32print.ClosePrinter(printer)
        time.sleep(.5)
        printer = win32print.OpenPrinter('PDFCreator')
        jobs = win32print.EnumJobs(printer, 0, 100, 2)
    win32print.ClosePrinter(printer)
Пример #3
0
def print_job_checker():
    server = socket.gethostname()
    while True:
        jobs = []
        for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None,
                                         1):
            flags, desc, name, comment = p
            phandle = win32print.OpenPrinter(name)
            print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
            if print_jobs:
                jobs.extend(list(print_jobs))
            for job in print_jobs:

                document = job["pDocument"]
                username = job['pUserName']
                identity = job['JobId']
                jobstate = job['Status']
                machinename = job['pMachineName'].replace("\\\\", "")
                pTime = datetime.datetime.now().isoformat()
                today = datetime.date.today().isoformat()
                Pages = job['TotalPages']
                printstr = "[Server:" + server + "],[Who:" + username + "],[Computer:" + machinename + "],[Print Time:" + pTime + "],[JobID:" + str(
                    identity) + "]"
                print(printstr)
            win32print.ClosePrinter(phandle)
        time.sleep(0.5)
Пример #4
0
    def GetJobList(self, printer):

        phandle = win32print.OpenPrinter(printer)
        #now get all the print jobs (start at job 0 and -1 for all jobs)
        jlist = win32print.EnumJobs(phandle, 0, -1, 1)
        win32print.ClosePrinter(phandle)
        return jlist  # this lists all jobs on all printers
Пример #5
0
def GetJobList(printer):
    printer_handle = win32print.OpenPrinter(printer)

    job_list = win32print.EnumJobs(printer_handle, 0, -1, 2)
    win32print.ClosePrinter(printer_handle)

    return job_list
Пример #6
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"]  # 获取当前打印机任务数目
Пример #7
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)
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)
def cancelPrint(printerName, docName):
    phandle = win32print.OpenPrinter(printerName)
    print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
    for job in print_jobs:
        if docName in job["pDocument"]:
            document = job["pDocument"]
            print("Canceling Print: " + document)
            win32print.SetJob(phandle, job["JobId"], 0, None,
                              win32print.JOB_CONTROL_DELETE)

    win32print.ClosePrinter(phandle)
    time.sleep(1)
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)
Пример #11
0
def get_job(printer_name):
    hprinter = win32print.OpenPrinter(printer_name)
    response = win32print.EnumJobs(hprinter, 0, 100)
    # print(response)
    json_arr = []
    for x in response:
        x['Submitted'] = 'Null'
        r = json.dumps(x)
        load_r = json.loads(r)
        json_arr.append(load_r)

    json_r = json.dumps(json_arr)
    print(json_r)
    return Response(json_r, status=200, mimetype='text/plain')
Пример #12
0
def printChecker(printerName, docName):
    """
    Checking job status from pdf invoice given to the printer, whether still in queue or have completely printed
    
    Parameters
    ----------
    printerName : obj
        The object of printer name obtained from printer enumeration
    docName :
        The document name to check (in this case is invoice number)
    """

    print('Printing Now : {}'.format(docName))
    jobs = 1
    timeCount = 0
    while jobs:
        phandle = win32print.OpenPrinter(printerName)
        enumStat = 1
        while enumStat:
            try:
                print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
                enumStat = 0
            except Exception:
                time.sleep(3)
                pass

        listPrintJobs = []

        if print_jobs:
            for job in print_jobs:
                listPrintJobs.append(job["pDocument"])

            if docName in job["pDocument"]:
                pass
            else:
                jobs = 0
        else:
            jobs = 0

        if timeCount == 120:
            print(
                'Printing taking too long time...\nPlease check the printer state, maybe out of paper or something.'
            )

        win32print.ClosePrinter(phandle)
        timeCount += 5
        time.sleep(5)

    print("Printing Complete")
Пример #13
0
    def get_status_of_printer(self, name_of_printer):
        """Метод для получения статуса принтера"""
        try:
            printer_handler = win32print.OpenPrinter(name_of_printer)
        except:
            return
        query_printer = win32print.EnumJobs(printer_handler, 0, -1, 1)

        if query_printer:
            first_document = query_printer[0]
            document_status = self.HANDLER_STATUS.get(
                int(first_document['Status']))
        else:
            document_status = self.HANDLER_STATUS.get(self.STATUS_IS_READY)
        return document_status
Пример #14
0
def printChecker(printerName, docName):
    jobs = [1]
    while jobs:
        jobs = []
        phandle = win32print.OpenPrinter(printerName)
        print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
        if print_jobs:
            jobs.extend(list(print_jobs))
        for job in print_jobs:
            if docName in job["pDocument"]:
                document = job["pDocument"]
                print("Printing Now: " + document + " - status %s" %
                      (job["Status"]))
        win32print.ClosePrinter(phandle)
        time.sleep(5)
Пример #15
0
def main():
    printer_name = win32print.GetDefaultPrinter()
    while 1:
        time.sleep(1)
        prn = win32print.OpenPrinter(printer_name)
        error = printer_errorneous_state(prn)
        if error:
            print("ERROR occurred: ", error)
        else:
            print("Printer OK... Name of Printer :" + prn)
            ilist = win32print.GetJob(prn, jobID, 1)
            print_jobs = win32print.EnumJobs(prn, 0, 1, 2)
            currentJob = {}
            for job in print_jobs:
                while (win32print.GetJob(job["JobId"]) > 0):
                    currentJob = job
            printCatching(currentJob)
Пример #16
0
def printChecker(printerName, docName):
    jobs = [1]
    while jobs:
        jobs = []
        phandle = win32print.OpenPrinter(printerName)
        print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
        if print_jobs:
            jobs.extend(list(print_jobs))
        for job in print_jobs:
            document = job["pDocument"]
            print("Printing Now: " + document)
        win32print.ClosePrinter(phandle)
        time.sleep(5)
        # check if the other thread sent a signal to stop execution.
        if stop_event.is_set():
            break
    print("Printing Complete")
Пример #17
0
def cancelPrint():
    jobs = [1]
    while jobs:
        jobs = []
        for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS,
                                         None, 1):

            flags, desc, name, comment = p

            phandle = win32print.OpenPrinter(name)
            print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
            if print_jobs:
                jobs.extend(list(print_jobs))
            for job in print_jobs:
                win32print.SetJob(phandle,
                                  win32print.AddJob(phandle)[1], 0, None,
                                  win32print.JOB_CONTROL_DELETE)
                document = job["pDocument"]
                print("Canceling Print: " + document)
            win32print.ClosePrinter(phandle)
        time.sleep(5)
Пример #18
0
def printChecker():
    jobs = [1]
    while jobs:
        jobs = []
        for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS,
                                         None, 1):

            flags, desc, name, comment = p

            phandle = win32print.OpenPrinter(name)
            print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
            if print_jobs:
                jobs.extend(list(print_jobs))
            for job in print_jobs:
                document = job["pDocument"]
                print("Printing Now: " + document)
            win32print.ClosePrinter(phandle)
        time.sleep(5)
        # check if the other thread sent a signal to stop execution.
        if stop_event.is_set():
            break
    print("Printing Complete")
Пример #19
0
def print_job_checker():
    """
    Prints out all jobs in the print queue every 5 seconds
    """
    jobs = [1]
    while jobs:
        jobs = []
        for p in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None,
                                         1):
            flags, desc, name, comment = p

            phandle = win32print.OpenPrinter(name)
            print_jobs = win32print.EnumJobs(phandle, 0, -1, 1)
            if print_jobs:
                jobs.extend(list(print_jobs))
            for job in print_jobs:
                print("printer name => " + name)
                document = job["pDocument"]
                print("Document name => " + document)
            win32print.ClosePrinter(phandle)

        time.sleep(5)
    print("No more jobs!")
Пример #20
0
def main():
    printer_name = "HP LaserJet 2420 PCL6 Class Driver"  # or get_printer_names()[0]
    prn = win32print.OpenPrinter(printer_name)
    error = printer_errorneous_state(prn)
    if error:
        print("ERROR occurred: ", error)
    else:
        print("Printer OK...")
        #  Do the real workS
        previusStatus = 0
        counter = 0
        previusJob = {}
        while True:
            jobs = []
            print_jobs = win32print.EnumJobs(prn, 0, 1, 2)
            if print_jobs:
                jobs.extend(list(print_jobs))

            if (len(jobs) > 0):
                if (previusStatus == 0):
                    print("Starting printing")
                counter = counter + 1
                previusStatus = 1
                previusJob = printCatching(jobs)
            else:
                if (previusStatus == 1):
                    print("User " + previusJob["pUserName"] +
                          " have printed " + str(previusJob["PagesPrinted"]) +
                          " Pages")
                    print("Finish printing")
                    print(counter)
                    counter = 0

                previusStatus = 0

    win32print.ClosePrinter(prn)
Пример #21
0
def list_jobs():
    p_handle = win32print.OpenPrinter(PRINTER_NAME)  # printer handler
    print_jobs = win32print.EnumJobs(p_handle, 0, -1, 1)
    return print_jobs
Пример #22
0
import win32api
import win32print

printer_name = win32print.GetDefaultPrinter()
print("默认打印机", printer_name)
handle_printer = win32print.OpenPrinter(printer_name)  # 获取打印机句柄
printer_info = win32print.GetPrinter(handle_printer, 2)  # 调用相关函数进行信息查询
for k in printer_info:
    print(k, printer_info[k])
task_list = win32print.EnumJobs(handle_printer, 0, 10)  # 参数(句柄,编文档号,枚举条数)
print(task_list)

import bin.my_lib.data_sqlite as db
res = db.execute('SELECT * FROM KEY_VALUE')
print('res:', res)
Пример #23
0
def checkStatus(printerName, docName):
    jobStatus = ''
    jobcheck = []
    phandle = win32print.OpenPrinter(printerName)
    data = ('req.txt', None, None)
    p = win32print.StartDocPrinter(phandle, 1, data)
    print(p)
    addJob = win32print.AddJob(phandle)
    print(addJob)
    pJobsEnum = win32print.EnumJobs(phandle, 0, -1, 1)

    for job in pJobsEnum:
        # a = job
        if docName in job['pDocument']:
            jobCheck = job
            jobStatus = job['Status']
            print(jobCheck)

    # type(jobCheck)
    # type(a)
    #JOB STATUS LIST
    blockedDriver = win32print.JOB_STATUS_BLOCKED_DEVQ  #The driver cannot print the job
    jobDeleted = win32print.JOB_STATUS_DELETED  #Job has been deleted
    jobDeleting = win32print.JOB_STATUS_DELETING  #Job is being deleted
    jobError = win32print.JOB_STATUS_ERROR  #An error is associated with the job
    jobOffline = win32print.JOB_STATUS_OFFLINE  #Printer is offline
    jobPaperOut = win32print.JOB_STATUS_PAPEROUT  #Printer is out of paper
    jobPaused = win32print.JOB_STATUS_PAUSED  #Job is paused
    jobPrinted = win32print.JOB_STATUS_PRINTED  #Job has printed
    jobPrinting = win32print.JOB_STATUS_PRINTING  #Job is printing
    jobRestart = win32print.JOB_STATUS_RESTART  #Job has been restarted
    jobSpooling = win32print.JOB_STATUS_SPOOLING  #Job is spooling
    userIntervent = win32print.JOB_STATUS_USER_INTERVENTION  #Printer has an error that requires the user to do something
    jobComplete = win32print.JOB_STATUS_COMPLETE  #The job is sent to the printer, but may not be printed yet. See Remarks for more information

    status = 0

    print(jobStatus)

    while status == 0:

        if jobStatus == blockedDriver:
            print('\nThe driver can\'t print the job')
            print('\nPlease check printer driver...')
            input('\nPress enter to continue...\n')

        elif jobStatus == jobDeleted:
            print('Job has been deleted')
            status = 1

        elif jobStatus == jobDeleting:
            print('\nDeleting Job')

        elif jobStatus == jobError:
            print('\nPrinting Error')
            print('\nPlease check printer condition...')
            input('\nPress enter to continue...\n')

        elif jobStatus == jobOffline:
            print('\nPrinter Offline')
            print('\nPlease turn on printer and continue...')
            input('\nPress enter to continue...\n')

        elif jobStatus == jobPaperOut:
            print('\nPrinter out of paper')
            print('\nPlease refill the paper and continue...')
            input('\nPress enter to continue...\n')

        elif jobStatus == jobPaused:
            print('\nJob paused')
            print('\nPlease resume the printing job and continue...')
            input('\nPress enter to continue...\n')

        elif jobStatus == jobPrinting:
            print('\nPrinting file...')

        elif jobStatus == jobPrinted:
            print('\nFile printed')
            status = 1

        elif jobStatus == jobRestart:
            print('\nRestarting job')

        elif jobStatus == jobSpooling:
            print('\nSpooling job')
            input('\nPress enter to continue...\n')

        elif jobStatus == userIntervent:
            print('\nJob has been intervented by user')
            input('\nPress enter to continue...\n')
            status = 1

        elif jobStatus == jobComplete:
            print('\nThe job is sent to the printer')

        else:
            print('\nPrinting Error')
            print('\nPlease check printer condition...')
            input('\nPress enter to continue...\n')

    return status
Пример #24
0
# make sure the default printer is set appropriately
PDF_CREATOR_PRINTER = 'PDFCreator'
if getDefaultPrinter() != PDF_CREATOR_PRINTER:
    print 'setting default printer to %s' % PDF_CREATOR_PRINTER
    win32print.SetDefaultPrinter(PDF_CREATOR_PRINTER)

# build the command line
commandParams.append('/NoStart')

inputFileExt = os.path.splitext(inputFile)[1].lower()
if readOnly and inputFileExt == '.pdf':
    commandParams.append('/IF"%s"' % inputFile)
    commandParams.append('/OF"%s"' % outputFile)
else:
    commandParams.append('/PF"%s"' % inputFile)

command = ' '.join(commandParams)

# execute the command
print '\ncommand: %s' % command
os.system(command)

# wait until the printer queue becomes empty
printer = win32print.OpenPrinter('PDFCreator')

while True:
    if len(win32print.EnumJobs(printer, 0, 1, 2)) == 0:
        break
    time.sleep(.5)