diff --git a/docs/edbob.win32.rst b/docs/edbob.win32.rst new file mode 100644 index 0000000..604875b --- /dev/null +++ b/docs/edbob.win32.rst @@ -0,0 +1,6 @@ + +:mod:`edbob.win32` +================== + +.. automodule:: edbob.win32 + :members: diff --git a/docs/index.rst b/docs/index.rst index c837b16..ad6d428 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -27,6 +27,7 @@ The following pages describe the ``edbob`` package from a caller's perspective. edbob.modules edbob.sqlalchemy edbob.util + edbob.win32 To-Do diff --git a/edbob/win32.py b/edbob/win32.py index 20ece0e..d33015c 100644 --- a/edbob/win32.py +++ b/edbob/win32.py @@ -33,6 +33,7 @@ if sys.platform == 'win32': # docs should build for everyone import pywintypes import win32file import winerror + import win32print def RegDeleteTree(key, subkey): @@ -106,3 +107,24 @@ def file_is_free(path): finally: if handle: win32file.CloseHandle(handle) + + +def send_data_to_printer(data, printer_name, job_name): + """ + Create and submit a new print job (named ``job_name``) which sends ``data`` + directly to the Windows printer identified by ``printer_name``. Returns + the number of bytes actually written to the printer port. + + This is designed for sending command strings to Zebra label printers, but + could potentially be useful for other situations as well. + """ + + printer = win32print.OpenPrinter(printer_name) + assert printer + assert win32print.StartDocPrinter(printer, 1, (job_name, None, None)) + win32print.StartPagePrinter(printer) + num_bytes = win32print.WritePrinter(printer, data) + win32print.EndPagePrinter(printer) + win32print.EndDocPrinter(printer) + win32print.ClosePrinter(printer) + return num_bytes