python 使用win32print 调用打印机打印doxc,pdf, 图片等文档,设置打印机参数无效,比如设置打印份数,纵向打印 等参数无效
try:
dir_path = "./file/2022-09-19/abc.docx"
# dir_path = "./file/2022-09-19/393f5435d981a2b2a01d381999969142.pdf"
# 获取默认打印机
printername = win32print.GetDefaultPrinter()
# printername = "Samsung M2070 Series"
# for it in win32print.EnumPrinters(2):
# print(it[2])
# 设置权限
PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
# 启动打印机
pHandle = win32print.OpenPrinter(printername, PRINTER_DEFAULTS)
# 打印机参数&属性 1:元组 2:列表
properties = win32print.GetPrinter(pHandle, 2)
devmode = properties['pDevMode']
# 横向打印
# devmode.Orientation = win32con.DMORIENT_PORTRAIT
# 打印份数
devmode.Copies = 3
devmode.PaperSize = 0 #
devmode.PaperLength = 3150 # .
devmode.PaperWidth = 2500
devmode.Duplex = win32con.DMDUP_SIMPLEX # 单面
devmode.Orientation = win32con.DMORIENT_LANDSCAPE # 纵向打印
properties['pDevMode'] = devmode
# 获得文件
filename = os.getcwd() + dir_path
win32print.SetPrinter(pHandle, 2, properties, 0)
win32print.SetDefaultPrinter(printername)
# for n in dir(properties['pDevMode']):
# print("%s = %s" % (n, getattr(properties['pDevMode'], n)))
# win32print.DocumentProperties(0, pHandle, printername, None, None, 5)
win32api.ShellExecute(0, "print", filename, None, ".", 0)
# os.startfile(filename, 'print')
win32print.ClosePrinter(pHandle)
except Exception as e:
print(str(e.args)+"请检查设备是否正确连接..")
这样打印字符串也是一样的效果,参数不起作用
printer_name = win32print.GetDefaultPrinter()
buf = bytes("123123", "utf-8")
# 设置权限
PRINTER_DEFAULTS = {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}
hPrinter = win32print.OpenPrinter(printer_name, PRINTER_DEFAULTS)
# 打印机参数&属性 1:元组 2:列表
properties = win32print.GetPrinter(hPrinter, 2)
devmode = properties['pDevMode']
# 横向打印
# devmode.Orientation = win32con.DMORIENT_PORTRAIT
# 打印份数
devmode.Copies = 3
devmode.Duplex = win32con.DMDUP_SIMPLEX # 单面
devmode.Orientation = win32con.DMORIENT_LANDSCAPE # 纵向打印
properties['pDevMode'] = devmode
win32print.SetPrinter(hPrinter, 2, properties, 0)
try:
hJob = win32print.StartDocPrinter(hPrinter, 1, ("文档", None, None))
try:
win32print.StartPagePrinter(hPrinter)
win32print.WritePrinter(hPrinter, buf)
win32print.EndPagePrinter(hPrinter)
finally:
win32print.EndDocPrinter(hPrinter)
finally:
win32print.ClosePrinter(hPrinter)
能正常打印,设置的参数不起作用