예제 #1
0
 def prints(self, code, align='left', qty=1):
     p_conf = settings.PRINTER_CONF
     usb_conf = p_conf['usb_conf']
     printer = Usb(usb_conf['vendor_id'], usb_conf['product_id'],
                   usb_conf['timeout'], usb_conf['input_endpoint'],
                   usb_conf['output_endpoint'])
     dummy = Dummy()
     if align.upper() == "LEFT":
         dummy._raw(TXT_ALIGN_LT)
     else:
         dummy._raw(TXT_ALIGN_RT)
     dummy._raw(PD_P50)
     dummy._raw(BARCODE_HEIGHT + six.int2byte(120))
     dummy._raw(BARCODE_WIDTH + six.int2byte(2))
     dummy._raw(BARCODE_FONT_A)
     dummy._raw(BARCODE_TXT_BLW)
     dummy._raw(_SET_BARCODE_TYPE(2))
     dummy._raw(code.encode())
     printer._raw(dummy.output)
     printer._raw(NUL)
예제 #2
0
    def test_print():

        global pos

        pos.close()

        dp = Dummy()

        bold_emphasis = b"\x1b\x21\x08"  # Sets text to bold
        second_typeface_emphasis = b"\x1b\x21\x01"  # Selects font B (different code to actual font size stuff)
        reset_emphasis = b"\x1b\x21\x00"  # Reset emphasis
        font_size_2x = b"\x1d\x21\x10"  # Change text size to 2x
        font_reset = b"\x1d\x21\x00"  # Reset text size

        dp.text("Test print\n\n")

        dp._raw(reset_emphasis)
        dp._raw(font_size_2x)
        dp.text("Font size two" + "\n")
        dp._raw(font_reset)

        dp._raw(second_typeface_emphasis)
        dp.text("Typeface two\n")
        dp._raw(reset_emphasis)

        dp._raw(bold_emphasis)
        dp.text("Bold text\n")
        dp._raw(reset_emphasis)

        dp.text("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-=_+[]{}'#@~;:<>?,./\\|'")

        dp.cut()

        test_handle = None

        test_handle = PosPrinter(int("0x" + SettingsUi.printProductIDLine.text(), base=16),
                                 int("0x" + SettingsUi.printVendorIDLine.text(), base=16),
                                 test_mode=True)

        if test_handle.failed:
            return

        test_handle.print(dp.output)
        test_handle.close()

        pos.reset()

        popup_message("Test printed!")
예제 #3
0
                reserveringPrinten.append({"opmerking": "^^ High Tea"})

        aantalReserveringen += 1

if reserveringPrinten:

    logging.debug('%s reserveringen worden geprint', aantalReserveringen)

    kitchen = Network(os.getenv("IP_PRINTER"))  #Printer IP Address
    output = Dummy()

    output.text("Reservering Update (" + tijdVandaagPrint + " " +
                datumVandaagPrint + ")\n\n")

    # Maak tekst zwart
    output._raw(b'\x1B\x35' + b'\x01')

    for reserveringPrint in reserveringPrinten:

        if reserveringPrint.get("bericht"):
            output.text(reserveringPrint.get("bericht") + "\n")

        if reserveringPrint.get("opmerking"):
            # Maak tekst rood
            output._raw(b'\x1B\x34' + b'\x01')
            output.text(reserveringPrint.get("opmerking") + "\n")
            # Maak tekst zwart
            output._raw(b'\x1B\x35' + b'\x01')

    # Cut
    output._raw(b'\x1B\x64' + b'\x03')
예제 #4
0
def print_message(message, header):
    """
    Prints a message through the POS printer with set formatting.
    Does __not__ take note of the current enable setting for the printer.

    TODO: Handle NoneType in any message field

    :param message: instance of class HoppieMessage
    :param header: string, printout header
    :return: nil
    """

    bold_emphasis = b"\x1b\x21\x08"  # Sets text to bold
    second_typeface_emphasis = b"\x1b\x21\x01"  # Selects font B (different code to actual font size stuff)
    reset_emphasis = b"\x1b\x21\x00"  # Reset emphasis
    font_size_2x = b"\x1d\x21\x10"  # Change text size to 2x
    font_reset = b"\x1d\x21\x00"  # Reset text size

    dpos = Dummy()

    # print header
    dpos._raw(reset_emphasis)
    dpos._raw(font_size_2x)
    dpos.text(header + "\n")
    dpos._raw(font_reset)

    # print associated time
    dpos._raw(second_typeface_emphasis)
    dpos.text(f"Received {datetime.datetime.utcfromtimestamp(message.time).strftime('%d-%H%Mz')}")
    dpos.text("\n")
    dpos._raw(reset_emphasis)

    # print message type
    dpos._raw(bold_emphasis)
    dpos.text("Type: ")
    dpos._raw(reset_emphasis)
    dpos.text("{}\n".format(message.mode))

    # print sender
    dpos._raw(bold_emphasis)
    dpos.text("From: ")
    dpos._raw(reset_emphasis)
    dpos.text("{}\n".format(message.sender))

    # print message
    dpos._raw(bold_emphasis)
    dpos.text("Message: ")
    dpos._raw(reset_emphasis)
    dpos.text("{}\n\n\n".format(message.message))

    pos.print(dpos.output)

    helper.add_event((lambda: True), (lambda: ui.statusbar.showMessage("Commands sent to printer")))
예제 #5
0
class EscPosPrint(BasePrint):
    '''
    print data to a ESC/POS printer.
    '''
    font = 'A'

    def __init__(self, encode=None, **kwargs):
        BasePrint.__init__(self, **kwargs)
        from escpos.printer import Dummy
        self.dummy = Dummy()
        if encode:
            self.dummy.codepage = encode
        self.dummy.hw('init')
        self.texts = []

    def _get_char_width(self, c):
        w = BasePrint._get_char_width(self, c)
        if self.font == 'A':
            w = w * 12
        elif self.font == 'B':
            if w == 1:
                w = 9
            else:
                w = 16
        return w

    def print_text(self, text):
        self.texts.append(text)
        self.dummy.text(text)

    def _set_with_node(self, node):
        font = get_node_attr(node, 'font', '')
        align = get_node_attr(node, 'align', '')
        size = get_node_attr_int(node, 'size', 0)
        text_type = 'B' if get_node_attr(node, 'bold', '') else '' + 'U' if get_node_attr(node, 'underline', '') else ''
        setd = {}
        if font:
            setd['font'] = font
            self.font = font
        if align:
            setd['align'] = align
        if size:
            setd['width'] = size
            setd['height'] = size
        if text_type:
            setd['text_type'] = text_type
        if setd:
            self.dummy.set(**setd)

    def _handle_node(self, node):
        tag = node.tagName.lower()
        if tag in ['table', 'text', 'td', 'tr']:
            self._set_with_node(node)
        BasePrint._handle_node(self, node)

    def handle_cut(self, node):
        self.dummy.cut()

    def handle_image(self, node):
        src = get_node_attr(node, 'src', '')
        path = self.get_url_to_path(src)
        if path:
            from PIL import Image
            img = Image.open(path)
            img = align_image(img, self.width, get_node_attr(node, 'align', 'left'))
            self.dummy.image(img)

    def handle_img(self, node):
        self.handle_image(node)

    def handle_qrcode(self, node):
        native = get_node_attr(node, 'native', 'False').upper() == 'TRUE'
        code = get_node_text(node)
        size = get_node_attr_int(node, 'size', 5)
        if not native:
            img = get_qrcode_image(code, size=size)
            img = align_image(img, self.width, get_node_attr(node, 'align', 'left'))
            self.dummy.image(img)
        else:
            self.dummy.qr(code, size=size, native=native)

    def handle_barcode(self, node):
        native = get_node_attr(node, 'native', 'False').upper() == 'TRUE'
        codetype = get_node_attr(node, 'type', 'EAN13').lower()
        code = get_node_text(node)
        if not native:
            import qrcode
            img = get_barcode_image(code, codetype=codetype)
            img = align_image(img, self.width, get_node_attr(node, 'align', 'left'))
            self.dummy.image(img)
        else:
            self.dummy.barcode(code, codetype.upper(), font=get_node_attr(node, 'font', 'A').upper(), pos=get_node_attr(node, 'pos', 'BELOW').upper(), function_type=get_node_attr(node, 'function', 'B').upper())

    def handle_beep(self, node):
        self.dummy._raw(b'\x1B\x42\x01\x01')

    def raw_send(self, msg):
        self.dummy._raw(msg)

    def get_data(self):
        return self.dummy.output

    def get_text(self):
        return ''.join(self.texts)