时间:2021-05-22
引言
python连接打印机进行打印,可能根据需求的不同,使用不同的函数模块。
普通打印
ShellExecute
另一个版本
import tempfileimport win32apiimport win32printfilename = tempfile.mktemp (".txt")open (filename, "w").write ("This is a test")win32api.ShellExecute ( 0, "printto", filename, '"%s"' % win32print.GetDefaultPrinter (), ".", 0)直接打印数据
win32print
打印图片
PIL win32ui
不使用额外的工具,在windows电脑上打印一张图片是相当的困难,至少需要3种不同的且相关的设备环境才可以。
还好,device-independent bitmap(DIB)和PIL可以帮助我们快速打印。下面的代码可以将图片发送至打印机打印尽可能大的尺寸且不失比例。
实践
从前台传来要打印的字符,后端生成二维码,并作出相应处理后,连接打印机打印图片。
# 打印二维码def print_barcode(request): import pyqrcode import random,string from PIL import Image,ImageDraw,ImageFont import numpy as np if request.is_ajax() and request.method == 'POST': result = {} bar_string = 'NaN' type = request.POST['type'] if type == 'box': # 生成箱子码 # 格式:P190823-K91 [P][日期][-][A-Z][0-9][0-9] bar_string = 'P'+datetime.date.today().strftime('%y%m%d')+'-'+str(random.choice('ABCDEFGHIGKLMNOPQRSTUVWXYZ'))\ + str(random.choice(range(10)))+ str(random.choice(range(10))) elif type == 'kuwei': # 生成库位码 bar_string = request.POST['string'] else: pass try: big_code = pyqrcode.create(bar_string, error='L', version=2 , mode='binary') big_code.png('./code.png', scale=8) img_code = Image.open('code.png') size = img_code.size img_final = Image.new('RGB', (size[0], size[1]+35), color=(255, 255, 255)) img_final.paste(img_code, (0, 0, size[0], size[1])) draw = ImageDraw.Draw(img_final) font = ImageFont.truetype('AdobeGothicStd-Bold.otf', size=35) width, height = draw.textsize(bar_string,font=font) draw.text(((size[0]-width)/2, size[1]-15), bar_string , fill=(0, 0, 0), font=font) img_final.save('./code.png') # 然后连接打印机将其打印出来即可 is_ok =[] if type == 'box': for i in range(4): temp = print_img('./code.png') is_ok.append(temp) else: temp = print_img('./code.png') is_ok.append(temp) # is_ok = True result['done'] = 'ok' if np.all(is_ok) else '连接打印机失败' except Exception as e: result['done'] = e return JsonResponse(result) def print_img(img): import win32print import win32ui from PIL import Image, ImageWin # 参考 http://timgolden.me.uk/python/win32_how_do_i/print.html#win32print try: printer_name = win32print.GetDefaultPrinter() hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) #printable_area = (300, 270) # 打印纸尺寸 #printer_size = (300, 270) # 打开图片并缩放 bmp = Image.open(img) if bmp.size[0] < bmp.size[1]: bmp = bmp.rotate(90) # ratios = [1.0 * printable_area[0] / bmp.size[1], 1.0 * printable_area[1] / bmp.size[0]] # scale = min(ratios) scale = 1 hDC.StartDoc(img) hDC.StartPage() dib = ImageWin.Dib(bmp) scaled_width, scaled_height = [int(scale * i) for i in bmp.size] x1 = 20 # 控制位置 y1 = -30 x2 = x1 + scaled_width y2 = y1 + scaled_height dib.draw(hDC.GetHandleOutput(), (x1, y1, x2, y2)) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC() return True except: return False打印效果:
以上内容为二赛君整理发布,转载请注明出处,谢谢。
参考
http://timgolden.me.uk/python/win32_how_do_i/print.htm
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
理光一体打印机,除了能够打印和复印等功能之外,还有一个很不错的扫描模块。可以扫描文档成图片或者pdf文件,尤其是对于身份证等扫描还有合同扫描经常需要用到一、扫描
无线直连的意思是指通过WiFi网络传输、共享文件的一种技术。通过WLAN直连可以传输图片、音乐,连接打印机打印等功能。WiFi直连通俗理解为WiFi设备点对点连
无线直连的意思是指通过WiFi网络传输、共享文件的一种技术。通过WLAN直连可以传输图片、音乐,连接打印机打印等功能。WiFi直连通俗理解为WiFi设备点对点连
锤子无线直连的意思是指锤子手机通过WiFi网络传输、共享文件的一种技术,通过WLAN直连可以传输图片、音乐,连接打印机打印等功能。 所谓无线网络,是指无需布线
局域网可以实现文件管理、应用软件共享、打印机共享等功能,如果在局域网同时有Win10和Win7系统,其中Win10又主导着打印机的连接状态,这种情况下怎么让wi