打印机 python使用 Pillow pywin32

import barcode
from barcode.writer import ImageWriter
from PIL import Image,ImageWin
import win32print
import win32ui

options = {
    'module_width': 0.24,
    'module_height':6.0,
    'font_size': 8,
    'text_distance': 3,
    'quiet_zone':4,
}


def print_img(image_path):
    mr_id=0
    has_750=False
    done=False
    printers = [printer[2] for printer in win32print.EnumPrinters(2)]
    for i, printer in enumerate(printers):
        # print(f"{i+1}: {printer}")
        if '750' in printer:
            mr_id=i
            has_750=True
            printer_name=printers[i]
    if has_750:
        print("已经提交给打印机",printer_name,"打印条码")
        image = Image.open(image_path)
        hDC = win32ui.CreateDC()
        hDC.CreatePrinterDC(printer_name)
        hDC.StartDoc(image_path)
        hDC.StartPage()
        dib = ImageWin.Dib(image)
        dib.draw(hDC.GetHandleOutput(), (0, 0, image.width, image.height))
        hDC.EndPage()
        hDC.EndDoc()
        del hDC
        done=True
    return done

def makeCode(code):
    Code128 = barcode.get_barcode_class('code128')
    code128 = Code128(code, writer=ImageWriter())
    filename = code128.save('print_swap',options=options)
    image_path=filename
    print_img(image_path)


code='HTA101CWGL0120260001'
makeCode(code)


通用打印代码(函数)

下面的A4 72dpi下的打印分辨率:dib.draw(hDC.GetHandleOutput(), (0, 0, 5040, 7128)) ,windows下打印机是按照DPI来的!切记切记。

不要忘记安装pillow 和pywin32的包

from PIL import Image,ImageWin
import win32print
import win32ui

def print_img(image_path):
    #设置打印机名称
    printer_name='1806'
    mr_id=0
    has_printer=False
    done=False
    printers = [printer[2] for printer in win32print.EnumPrinters(2)]
    for i, printer in enumerate(printers):
        # print(f"{i+1}: {printer}")
        if printer_name in printer:
            mr_id=i
            has_printer=True
            printer_name=printers[i]
    if has_printer:
        print("已经提交给打印机",printer_name,"打印首页")
        image = Image.open(image_path)
        hDC = win32ui.CreateDC()
        hDC.CreatePrinterDC(printer_name)
        hDC.StartDoc(image_path)
        hDC.StartPage()
        dib = ImageWin.Dib(image)
        # dib.draw(hDC.GetHandleOutput(), (0, 0, image.width, image.height))
        dib.draw(hDC.GetHandleOutput(), (0, 0, 5040, 7128))
        hDC.EndPage()
        hDC.EndDoc()
        del hDC
        done=True
    return done
此条目发表在None分类目录。将固定链接加入收藏夹。

发表回复