def set_print_preference(device_name=None,PaperSize='100*150'): # 更改打印机首选项设置 # https://cloud.tencent.com/developer/ask/sof/1515323/answer/2070398 # https://www.cnblogs.com/cfld/p/16159080.html # http://timgolden.me.uk/pywin32-docs/PyDEVMODE.html # https://xyy15926.github.io/categories/Python/Pywin32 # https://www.php1.cn/detail/win32print_SheZh_25df7a0c.html import win32api, win32con width, length = PaperSize.split('*') printaccess = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} # 获取最高权限 try: # 获取指定打印机句柄 handle = win32print.OpenPrinter(device_name, printaccess) #关闭打印机 win32print.ClosePrinter(handle) # 获取指定打印机句柄 handle = win32print.OpenPrinter(device_name, printaccess) properties = win32print.GetPrinter(handle, 2) devmode = properties['pDevMode'] print('devmode:', devmode) devmode.FormName = "test1" # 打印机首选项中,页面设置的名称 devmode.PaperSize = 0 #256通用的用于指定用户自定义的纸张大小 # 纸号 默认0 则PaperLength,PaperWidth有效 或者设置 win32con.DMPAPER_B5 表示纸号为B5 devmode.PaperLength = int(length)*10 # devmode.PaperWidth = int(width)*10+26 # 26是打印机首选项里面的衬纸宽度1.3*2*10 devmode.Copies = 1 #要打印的份数 # devmode.Scale = 100 #缩放 devmode.Duplex = win32con.DMDUP_SIMPLEX # 单面 devmode.Orientation = win32con.DMORIENT_LANDSCAPE # 横向打印 properties['pDevMode'] = devmode win32print.SetPrinter(handle, 2, properties, 0) # 检查默认设置是否成功 print(win32print.GetPrinter(handle, 2)['pDevMode'].PaperWidth) print(win32print.GetPrinter(handle, 2)['pDevMode'].PaperLength) win32print.ClosePrinter(handle) except Exception as first: print(f'first:{first}')
def set_print_preference2(device_name): # 获取默认打印机参数 import win32con import win32print PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS} pHandle = win32print.OpenPrinter(device_name, PRINTER_DEFAULTS) properties = win32print.GetPrinter(pHandle, 2) pDevModeObj = properties["pDevMode"] print(pDevModeObj.FormName) print(pDevModeObj.PaperLength) print(pDevModeObj.PaperWidth) print(pDevModeObj.DriverData) print(pDevModeObj.Copies) print(pDevModeObj.Collate) for n in dir(pDevModeObj): if n.startswith('__'):continue print("%s\t%s" % (n, getattr(pDevModeObj, n))) # pDevModeObj.Orientation = 2 # win32print.SetPrinter(pHandle, 2, properties, 0) # win32print.ClosePrinter(pHandle) # 弹出修改属性的窗口 # win32print.DocumentProperties(0, pHandle, device_name, None, None, 5) # from ctypes import windll, c_void_p # windll['winspool.drv'].AdvancedDocumentPropertiesA(None, c_void_p(pHandle.handle), device_name, None, None)