[Python] Printer 인쇄방법(win32printer, pyside6)

최근에 Zebra프린터로 라벨을 출력하는 프로그램을 만들게 됐어요.
그래서 Zebra프린터로 ZPL명령어 전송해 인쇄하는 기능이 필요했는데 진짜 구글링 엄청나게 한 것 같아요…
구글링하면서 항상 느끼는 점이지만 영어 공부를 좀 해야할 것 같네요… 구글번역에 의존하기엔 해석이 달라져서
암튼 생각보다 예제소스가 너무 안나오고 나의 소스가 정답은 아닐지도 모른다는 것을 미리 말씀드립니다.
다만, 출력은 된다는거… ㅎ
그래서 습득한 Zebra프린터로 ZPL명령 전송하는 방법이랑 추가적으로 일반 프린터 인쇄기능도 학습했어요.
해당 지식을 공유하는 내용에 관하여 포스팅 시작하도록 하겠습니다.
참고로 파린이라 문맥이나 로직이 깔끔하지 않을 수 있습니다. ^^;;

win32print 패키지 이용하여 Zebra프린터에 ZPL명령 전송하기

네트워크 방식으로는 소스들이 좀 있었는데 USB방식으로 연결해서 출력하는 소스는 진짜 잘 안나오더라구요.
그만큼 잘안쓴다는거겠지만 암튼 저는 USB방식이 필요했어요.
아래 소스 사용하시면 큰 문제없이 출력 확인이 가능하실거예요.
아래 소스상 기본 프린터를 Zebra프린터로 설정해 놓아야 합니다.

import win32print

# ZPL 데이터 생성
zpl_data = "^XA^FO50,50^ADN,36,20^FDHello, ZPL!^FS^XZ"
# 기본설정된 프린터 이름
print_name = win32print.GetDefaultPrinter()
# 프린터핸들 Open
hPrinter = win32print.OpenPrinter (print_name)
# 예외처리
try:
    # 인쇄작업 시작 (프린터핸들, 레벨, 상세튜플(문서이름, 출력파일, 데이터유형))
    hJob = win32print.StartDocPrinter (hPrinter, 1, ("ZPL Print", None, "Raw"))
    try:
        # 스풀러에 페이지 인쇄시작을 알림 (프린터핸들)
        win32print.StartPagePrinter (hPrinter)
        # 지정된 바이트를 지정된 프린터에 복사 (프린터핸들, 문자열버퍼) 
        win32print.WritePrinter (hPrinter, zpl_data.encode("utf-8"))
        # 스풀러에 페이지 인쇄종료를 알림 (프린터핸들)
        win32print.EndPagePrinter (hPrinter)
    finally:
        # 인쇄작업 종료 (프린터핸들)
        win32print.EndDocPrinter (hPrinter)
finally:
    # 프린터핸들 Close
    win32print.ClosePrinter (hPrinter)

모듈 win32print 참고사이트 를 통해서 정보를 많이 얻었고,
혹시 연결된 프린터 목록을 보고싶으시면 print(win32print.EnumPrinters(2))라고 입력하시면 됩니다.

pyside6 패키지 이용하여 일반프린터에 한글 출력하기

win32print를 사용해서 일반프린터로 인쇄하는 작업을 먼저 테스트했었는데 어째서인지 한글 출력부분에서 잘 안됐어요.
그래서 찾다보니 pyside6를 이용한 한글 출력방법이 있었어요.
아래 소스 사용하시면 큰 문제없이 출력 확인이 가능하실거예요.

###### 프린터로 한글출력 ####################################
from PySide6.QtWidgets import QApplication, QTextEdit
from PySide6.QtPrintSupport import QPrinter
import sys
import win32print

def print_text():
    app = QApplication(sys.argv)

    # 텍스트 편집기 위젯 생성
    text_edit = QTextEdit()
    text_edit.setPlainText("한글테스터 Hello, Printer!")  # 출력할 텍스트 설정

    # 프린터 생성
    printer = QPrinter()
    printer.setPrinterName(win32print.GetDefaultPrinter())  # 프린터 이름 설정

    text_edit.print_(printer)

if __name__ == "__main__":
    print_text()

제 글이 많은 도움이 되셨으면 좋겠습니다.

파이썬에 관한 더 많은 정보가 필요하시면 아래링크를 클릭해주세요.