更改打印机首选项设置

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值