diff --git a/examples/software_barcode.py b/examples/software_barcode.py new file mode 100644 index 0000000..8476bac --- /dev/null +++ b/examples/software_barcode.py @@ -0,0 +1,8 @@ +from escpos.printer import Usb + +# Adapt to your needs +p = Usb(0x0416, 0x5011, profile="POS-5890") + +# Some software barcodes +p.soft_barcode('code128', 'Hello') +p.soft_barcode('code39', '123456') \ No newline at end of file diff --git a/setup.py b/setup.py index c5d77f6..bd4a3ed 100755 --- a/setup.py +++ b/setup.py @@ -115,7 +115,8 @@ setup( 'pyyaml', 'argparse', 'argcomplete', - 'future' + 'future', + 'pyBarcode==0.8b1' ], setup_requires=[ 'setuptools_scm', diff --git a/src/escpos/escpos.py b/src/escpos/escpos.py index 3faba40..d23bb05 100644 --- a/src/escpos/escpos.py +++ b/src/escpos/escpos.py @@ -19,6 +19,9 @@ import qrcode import textwrap import six +import barcode +from barcode.writer import ImageWriter + from .constants import ESC, GS, NUL, QR_ECLEVEL_L, QR_ECLEVEL_M, QR_ECLEVEL_H, QR_ECLEVEL_Q from .constants import QR_MODEL_1, QR_MODEL_2, QR_MICRO, BARCODE_TYPES, BARCODE_HEIGHT, BARCODE_WIDTH from .constants import TXT_ALIGN_CT, TXT_ALIGN_LT, TXT_ALIGN_RT, BARCODE_FONT_A, BARCODE_FONT_B @@ -396,6 +399,26 @@ class Escpos(object): if function_type.upper() == "A": self._raw(NUL) + def soft_barcode(self, barcode_type, data, module_height=5, module_width=0.2, text_distance=1): + image_writer = ImageWriter() + + if barcode_type not in barcode.PROVIDED_BARCODES: + raise BarcodeTypeError( + 'Barcode type {} not supported by software barcode renderer' + .format(barcode_type)) + + barcode_class = barcode.get_barcode_class(barcode_type) + my_code = barcode_class(data, writer=image_writer) + + my_code.write("/dev/null", { + 'module_height': module_height, + 'module_width': module_width, + 'text_distance': text_distance + }) + + image = my_code.writer._image + self.image(image, impl='bitImageColumn') + def text(self, txt): """ Print alpha-numeric text