学习机项目已进入打印环节,需要调用打印机完成题库内的内容打印。
我使用的打印机 80MM 的热敏 厨房专用 希望孩子做题像切菜一样顺利吧!
寻找打印机
printers = [printer[2] for printer in win32print.EnumPrinters(2)]
for i, printer in enumerate(printers):
print(f"{i + 1}: {printer}")
print(data1)
print(type(data1))
实例打印机
printer_name = 'RONGTA 80mm Series Printer' #printers[0]
hDC = win32ui.CreateDC()
hDC.CreatePrinterDC(printer_name) #
hDC.StartDoc("标签名")
hDC.StartPage()
设置每个小卷必打内容 或者说头部
Ctime = time.strftime("%H:%M", time.localtime())
Num = 'A201'
Name = '张三 男 66'
DataList = [
[190, 0, '用时:', {'name': '黑体', 'height': 30}],
[15, 0, '姓名:', {'name': '黑体', 'height': 30}],
# [15, 94, '项目:', {'name': '宋体', 'height': 27}],
# [90, 10, Num, {'name': '宋体', 'height': 33, 'weight': 1000}],
[340,0,"发卷时间:"+Ctime, {'name': '黑体', 'height': 30}],
# [462, 10, Name, {'name': '宋体', 'height': 33, 'weight': 1000}],
]
设置好开打
for data in DataList:
font = win32ui.CreateFont(data[3])
hDC.SelectObject(font)
hDC.TextOut(data[0], data[1], data[2])
#hDC.DrawText(txt,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT)
下面是完整代码
import win32print, win32ui, time
#from PIL import Image, ImageWin
printers = [printer[2] for printer in win32print.EnumPrinters(2)]
for i, printer in enumerate(printers):
print(f"{i + 1}: {printer}")
print(data1)
print(type(data1))
# 选择打印机
# choice = int(input("选择要使用的打印机 (输入对应的序号): ")) - 1
printer_name = 'RONGTA 80mm Series Printer' #printers[0]
hDC = win32ui.CreateDC()
hDC.CreatePrinterDC(printer_name) #
hDC.StartDoc("标签名")
hDC.StartPage()
Ctime = time.strftime("%H:%M", time.localtime())
Num = 'A201'
Name = '张三 男 66'
DataList = [
[190, 0, '用时:', {'name': '黑体', 'height': 30}],
[15, 0, '姓名:', {'name': '黑体', 'height': 30}],
# [15, 94, '项目:', {'name': '宋体', 'height': 27}],
# [90, 10, Num, {'name': '宋体', 'height': 33, 'weight': 1000}],
[340,0,"发卷时间:"+Ctime, {'name': '黑体', 'height': 30}],
# [462, 10, Name, {'name': '宋体', 'height': 33, 'weight': 1000}],
]
for data in DataList:
font = win32ui.CreateFont(data[3])
hDC.SelectObject(font)
hDC.TextOut(data[0], data[1], data[2])
#hDC.DrawText(txt,(ulc_x,ulc_y,lrc_x,lrc_y),win32con.DT_LEFT)
font = win32ui.CreateFont({'name': '宋体', 'height': 22, })
hDC.SelectObject(font)
# 长文本换行
fsize = 40 # 字体大小
min_x =50 # X轴最小值
max_x = 520 # X轴最大值
text_x = 20 # 字X坐标
text_y = 60 # 字Y坐标
font = win32ui.CreateFont({'name': '宋体', 'height': fsize})
hDC.SelectObject(font)
# 用list(项目)转为列表,后用for加位置判断一个个字打入,实现换行
for x in data1:
for text in list(x):
if text_x > max_x and text not in ['%']: # 判断 text_x是否超过最大设定值 及 是否'、'开头
text_y += fsize + 15 # 行间距3
text_x = min_x
font = win32ui.CreateFont({'name': '黑体', 'height': 40})
hDC.SelectObject(font)
hDC.TextOut(text_x, text_y, text)
text_x += fsize + 10 # 字间距0
text_x = 20
text_y += fsize + 60 # 行间距3
# hDC.TextOut(text_x, text_y+20, '!')
# image_path = r'C:\Users\Administrator\Downloads\zhubi.png'
# image = Image.open(image_path)
# dib = ImageWin.Dib (image)
# dib.draw (hDC.GetHandleOutput (), (0, 600, 399, 239))
hDC.TextOut(text_x, text_y + 60, "豌豆语文 严选100 高效刷题营")
hDC.EndPage()
hDC.EndDoc()