# 设置打印机参数
printer_name = win32print.GetDefaultPrinter()  # 获取默认打印机名称
PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
pHandle = win32print.OpenPrinter(printer_name, PRINTER_DEFAULTS)
properties = win32print.GetPrinter(pHandle, 2)

devmode = properties['pDevMode']
devmode.PaperSize = 0  #
devmode.PaperLength = 500  # 设置打印纸的长度()
devmode.PaperWidth = 1000  # 设置打印纸的宽度()
devmode.Duplex = win32con.DMDUP_SIMPLEX  # 单面
devmode.Orientation = win32con.DMORIENT_PORTRAIT  # DMORIENT_LANDSCAPE  # 横向打印
properties['pDevMode'] = devmode
for temp_loop in range(2):
try:
win32print.SetPrinter(pHandle, 2, properties, 0)
except Exception as ff:

win32print.SetDefaultPrinter(printer_name)
# 获取打印机设备上下文
hDC = win32ui.CreateDC()
hDC.CreatePrinterDC(printer_name)

# 开始打印
hDC.StartDoc("Print Document")
hDC.StartPage()

# 在打印设备上绘制图像
scale = 1
dib = ImageWin.Dib(canvas)
dib.draw(hDC.GetHandleOutput(),
(0, 0, int(canvas_width * scale), int(canvas_height * scale)))

# 结束打印
hDC.EndPage()
hDC.EndDoc()
hDC.DeleteDC()