diff --git a/AUTHORS b/AUTHORS index 9c14d27..02185a5 100644 --- a/AUTHORS +++ b/AUTHORS @@ -26,6 +26,7 @@ Omer Akram Patrick Kanzler primax79 Qian Linfeng +Ramon Poca reck31 Renato Lorenzi Romain Porte diff --git a/src/escpos/printer.py b/src/escpos/printer.py index 648b4bb..319d773 100644 --- a/src/escpos/printer.py +++ b/src/escpos/printer.py @@ -339,3 +339,48 @@ class Dummy(Escpos): def close(self): pass + + +_WIN32PRINT = False +try: + import win32print + _WIN32PRINT = True +except ImportError: + pass + +if _WIN32PRINT: + class Win32Raw(Escpos): + def __init__(self, printer_name=None, *args, **kwargs): + Escpos.__init__(self, *args, **kwargs) + if printer_name is not None: + self.printer_name = printer_name + else: + self.printer_name = win32print.GetDefaultPrinter() + self.hPrinter = None + + def open(self, job_name="python-escpos"): + if self.printer_name is None: + raise Exception("Printer not found") + self.hPrinter = win32print.OpenPrinter(self.printer_name) + self.current_job = win32print.StartDocPrinter(self.hPrinter, 1, (job_name, None, "RAW")) + win32print.StartPagePrinter(self.hPrinter) + + def close(self): + if not self.hPrinter: + return + win32print.EndPagePrinter(self.hPrinter) + win32print.EndDocPrinter(self.hPrinter) + win32print.ClosePrinter(self.hPrinter) + self.hPrinter = None + + def _raw(self, msg): + """ Print any command sent in raw format + + :param msg: arbitrary code to be printed + :type msg: bytes + """ + if self.printer_name is None: + raise Exception("Printer not found") + if self.hPrinter is None: + raise Exception("Printer job not opened") + win32print.WritePrinter(self.hPrinter, msg)