#!/bin/env python3 from escpos.printer import Usb import getopt import sys import datetime TEXT_LIMIT=256 class PrintOptions: title = None text = None verbose = False image = None def get_printer(): return Usb(0x0525, 0xa700) # <-- change based on your printer vendor and product ID def do_print(options): p = get_printer() p.set(align='center') p.text(str(datetime.datetime.now().strftime("%H:%M:%S"))) p.text(' ') p.text(str(datetime.date.today())) p.text('\n') if (options.title): p.set(align='center', text_type='B') # center bold p.text(options.title + '\n') p.set() if len(options.text) > TEXT_LIMIT: p.text(options.text[:TEXT_LIMIT] + '[...]\n(truncated)') else: p.text(options.text + '\n') if options.image != None: p.image(options.image) p.cut() def do_print_image(path): p = get_printer() p.image(path) p.cut() def usage(): print(f'usage: {sys.argv[0]} [OPTIONS] TEXT...') print(f' OPTIONS') print(f' -v ... verbose') print(f' -h ... help') print(f' -t --title=X ... title to prepend') print(f' -i --image=X ... image path') print(f' TEXT is taken as the rest of argumenats if present,') print(f' otherwise from STDIN (terminated by Ctrl+D).') def main(): try: opts, args = getopt.getopt(sys.argv[1:], "ht:i:v", ["help", "title=", "image="]) except getopt.GetoptError as err: print(err) usage() sys.exit(2) title = None verbose = False image = None for o, a in opts: if o == "-v": verbose = True elif o in ("-h", "--help"): usage() sys.exit() elif o in ("-i", "--image"): image = a elif o in ("-t", "--title"): title = a else: assert False, "unhandled option" options = PrintOptions() options.title = title options.verbose = verbose options.text = " ".join(args) options.image = image if len(options.text) <= 0: for line in sys.stdin: options.text = options.text + line do_print(options) if __name__ == "__main__": main()