最近因为项目需要,需要对打印机进行控制和管理,除了常规的打印页面设置,还需要对打印机状态进行监控,如忙、空闲、缺纸、缺墨等问题。
用Java的print api搞了好久,结果不尽人意。改投python的win32print api门下。
1、引入包
import win32print
import win32ui
import win32con
2、获取打印机
#获取默认打印机
printername = win32print.GetDefaultPrinter()
#设置权限
PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
#按照指定名称获取打印机
pHandle = win32print.OpenPrinter("Panasonic KX-MB1678 GDI", PRINTER_DEFAULTS)
pHandle = win32print.OpenPrinter(printername, PRINTER_DEFAULTS)
printerscl=win32print.GetPrinter(pHandle, 2)
#此处返回值存在问题:getprinter里面传入1 返回一个元组,传入2返回一个字典
3、返回打印机属性和参数
以返回字典类型为例
for it in printerscl:
print(it + ':' + str(printerscl[it]))
print(type(printerscl[it]))
# if str(it)=='pDevMode':
# for itp in printerscl[it]:
# print(itp + ':' + str(printerscl[it][itp]))
# if str(it)=='pDevMode':
# for n in dir(printerscl[it]):
# print(n,getattr(printerscl[it],n))
# if str(it)=='pSecurityDescriptor':
# for its in printerscl[it]:
# print(its + ':' + str(printerscl[it][its]))
if str(it)=='pSecurityDescriptor':
for n in dir(printerscl[it]):
print(n,getattr(printerscl[it],n))
win32print.ClosePrinter(pHandle)
返回值
可以看到倒数第三项存在一个status参数。