Я пытаюсь изменить имя задания в спулере Win32, используя Python 3.6 и win32print в Windows 10.
Вот код, который я использую. Обратите внимание, что переменные js и rename являются управляющими переменными, если вам нужно настроить их для запуска в вашей среде. js содержит подстроку существующего имени документа, и идея состоит в том, что имя документа первого подходящего задания очереди, имеющего имя документа, содержащее этот фрагмент, будет изменено на содержимое переменной переименования с помощью кода.
import sys, os
import time
import win32print
#####################################
def print_job_lister( js='' ):
"""
Finds a job whose name contains the passed substring.
"""
res = None
for p in win32print.EnumPrinters( win32print.PRINTER_ENUM_LOCAL, None, 1 ):
flags, desc, name, comment = p
showprinter = True
phandle = win32print.OpenPrinter( name )
print_jobs = win32print.EnumJobs( phandle, 0, -1, 1 )
for job in print_jobs:
document = job["pDocument"]
if js in document:
if showprinter:
print( f'printer => {name}')
showprinter = False
print( f' Document => {document}')
print( f' JobId => {job["JobId"]} Status => {job["Status"]}'
f' Pages => {job["TotalPages"]}')
if not res:
res = ( name, job["JobId"])
win32print.ClosePrinter( phandle )
return res
#####################################
if __name__ == '__main__':
js = '20181114'
rename = 'foobar'
res = print_job_lister( js )
print( res )
if res:
phandle = win32print.OpenPrinter( res[ 0 ])
jobinfo = win32print.GetJob( phandle, res[ 1 ], 1 )
jobinfo['Position'] = win32print.JOB_POSITION_UNSPECIFIED
if rename:
jobinfo['pDocument'] = rename
print( f'abc {win32print.JOB_POSITION_UNSPECIFIED} {jobinfo}')
win32print.SetJob( phandle, res[ 1 ], 1, jobinfo, 0 )
win32print.ClosePrinter( phandle )
Вот ошибка, которую я получаю:
{'JobId': 27, 'pPrinterName': 'HL6180dw', 'pMachineName': '\\\\STEPHEN', 'pUserName': 'Glenn', 'pDocument': 'duh', 'pDatatype': 'NT EMF 1.008', 'pStatus': None, 'Status': 8210, 'Priority': 1, 'Position': 0, 'TotalPages': 22, 'PagesPrinted': 0, 'Submitted': pywintypes.datetime(2018, 11, 14, 21, 1, 27, 882000, tzinfo=TimeZoneInfo('GMT Standard Time', True))}
Traceback (most recent call last):
File "D:\my\py\spool.py", line 109, in <module>
win32print.SetJob( phandle, res[ 1 ], 1, jobinfo, 0 )
pywintypes.error: (1804, 'SetJob', 'The specified datatype is invalid.')