python使用自定義配置並調用電腦打印機


python調用windows打印機,需要用到包pywin32

pip install pywin32 -i https://pypi.tuna.tsinghua.edu.cn/simple
import win32con
import win32gui
import win32print

以上幾個包會在打印時使用。

調用打印機的順序為

獲取打印機名稱 -> 連接打印機 -> 定義打印機配置 -> 創建新DC(設備上下文) 
-> 創建文檔 -> 創建頁面 -> 打印內容 -> 結束頁面 -> 結束文檔

1) 獲取打印機名稱

在安裝完對應驅動程序后並添加打印機后

    import win32print
    def get_item_printer(printer_name=None):
        if not printer_name:
            printer_name = win32print.GetDefaultPrinter()
        for it in win32print.EnumPrinters(2):
            if it[2].upper() == printer_name.upper():
                return it
        return None

2) 連接打印機

hprinter = win32print.OpenPrinter(MyPrinter.printer_name)  # 打印機pyhandle對象

3) 自定義打印機配置

devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"]  # 獲取配置
devmode.FormName = "Gprinter 58(48) x 3276 mm"  # 定義配置
pDC = win32gui.CreateDC("WINSPOOL", "printer_name", devmode)  # 使用配置
# 所有dev選項通過dir(devmode)查看
#注:devmode中有一個DriverData的選項,是一堆字節碼,
# 如果不知道打印機如何配置,可以先將打印機手動配置好,
#然后記錄下DriverData數據,在以后的使用中直接將其賦值即可。
#update:某些參數是無法通過記錄driverdata實現,比如卷的設置
driver_data = b"\xa4\x00\x01\x00MDTN\x02\x00\x00\x00\x05\x00\x00\x00\xcb\x00\x00\x00\x00\x19\x00\x00\xe4\x0c\x00\x00\x00\x00\x00\x00\xb8\x0b\x00\x00p\x17\x00\x00\x00\x00\x00\x00\xdc\x05\x00\x00X\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007\x0c\x00\x00\xda\x0c\x00\x00\x10'\x00\x00\x10'\x00\x00\x10'\x00\x00\x10'\x00\x00\xa0\n\x00\x00\xc2\x06\x00\x00\xb8\x06\x00\x00,\x04\x00\x00@\x01\x00\x00\xd2\x00\x00\x00\x18\x00\x00\x00\x00\x00\x10'\x10'\x10'\x00\x00\x10'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00d\x04\x01\x04\x00\x00\x00\x00\xce\x18\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02\x00\x00\x00\x12\x000\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\xff\xff\xff\xff\x02\x00\x00\x00\x01\x00\x00\x00P\x00\x00\x00\x00\x00\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\xb8\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xa8)\x01\x00\x03\x00\x00\x00ssstscl\x04"
devmode.DriverData = driver_data

4) 創建Dc

pDC = win32gui.CreateDC("WINSPOOL", "printer_name", devmode)

5) 創建文檔

win32print.StartDoc(pDC, ("some_name", None, None, 0))

6) 創建頁面

win32print.StartPage(pDC)

7) 打印內容

# 打印文本

# 添加了DT_CALCRECT計算出文本面積大小,但是是單行的
drawrect = win32gui.DrawText(MyPrinter.pDC,
                                     msg,
                                     -1,
                                     (0, 0, 0, 0),
                                     win32con.DT_NOPREFIX | win32con.DT_LEFT | win32con.DT_TOP | win32con.DT_CALCRECT)
# 根據紙張長度進行換行,得到合適的打印區域大小
rect = (drawrect[1][0],
        drawrect[1][1] + y,
        MyPrinter.paper_width,
        ((drawrect[1][2] + MyPrinter.paper_width) // MyPrinter.paper_width + 1) * drawrect[1][3] + y)
# 使用得到的打印區域進行打印
win32gui.DrawText(
    MyPrinter.pDC,
    msg,
    -1,
    rect,
    win32con.DT_NOPREFIX | win32con.DT_LEFT | win32con.DT_TOP | win32con.DT_EDITCONTROL | win32con.DT_WORDBREAK,
)
y = rect[3]  # 連續打印的一個自定義參數
# 打印圖片
image = Image.open(io.BytesIO(pic))
dib = ImageWin.Dib(image)
dib.draw(MyPrinter.pDC, (0, y, MyPrinter.paper_width, y + MyPrinter.paper_width))
y += MyPrinter.paper_width

 此時不會實際打印,需要結束文檔后才會打印

8) 結束頁面

win32print.EndPage(pDC)

9) 結束文檔

win32print.EndDoc(pDC)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM