printer.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import tabulate
  2. from escpos.printer.win32raw import Win32Raw
  3. from escpos.printer.usb import Usb
  4. from escpos.printer.network import Network
  5. from escpos.printer import Dummy
  6. from escpos.escpos import Escpos
  7. from impresora.order import Order
  8. class BasePrinter:
  9. def __init__(self):
  10. self.bolded = False
  11. self.font = "a"
  12. self.doubled_size = False
  13. self.work = Dummy()
  14. self.printer:Escpos
  15. def change_font(self):
  16. self.font = "b" if self.font == "a" else "a"
  17. self.work.set(font=self.font)
  18. def text(self, text):
  19. # Print the text
  20. self.work.text(text+"\n")
  21. def bold(self):
  22. # Set bold for the next print
  23. self.bolded = not self.bolded
  24. self.work.set(bold=self.bolded)
  25. def double_size(self):
  26. # Set double size for the next print
  27. self.doubled_size = not self.doubled_size
  28. self.work.set(double_height=self.doubled_size, double_width=self.doubled_size)
  29. def default(self):
  30. # Set default size for the next print
  31. self.work.set_with_default()
  32. def print_order(self, order:Order, mesa:int = 0):
  33. # Print the order details
  34. self.default()
  35. self.double_size()
  36. self.bold()
  37. self.text(f"Orden Biergarten Klein\n")
  38. self.default()
  39. self.text(f"Fecha: {order.date.strftime('%d/%m/%Y: %H:%M:%S')}")
  40. self.bold()
  41. self.text(f"Mesa: {mesa}\n")
  42. self.default()
  43. self.text(order.tabulate())
  44. self.bold()
  45. self.text(f"Total: {order.total}")
  46. self.work.cut()
  47. # Print the order details
  48. self.printer._raw(self.work.output)
  49. self.work.clear()
  50. # Intentar cerrar la impresora si el método existe
  51. if hasattr(self.printer, 'close'):
  52. self.printer.close()
  53. class PrinterWindows(BasePrinter):
  54. def __init__(self, printer_name="Impresora Termica"):
  55. super().__init__()
  56. self.printer = Win32Raw(printer_name)
  57. class PrinterUSB(BasePrinter):
  58. def __init__(self, vendor_id, product_id):
  59. super().__init__()
  60. self.printer = Usb(vendor_id, product_id,in_ep=0x81,out_ep=0x03)
  61. class PrinterNetwork(BasePrinter):
  62. def __init__(self, host, port):
  63. super().__init__()
  64. self.printer = Network(host, port)