diff --git a/examples/software_barcode.py b/examples/software_barcode.py new file mode 100644 index 0000000..2fd3c18 --- /dev/null +++ b/examples/software_barcode.py @@ -0,0 +1,9 @@ +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') diff --git a/setup.py b/setup.py index 2fd3051..60a9209 100755 --- a/setup.py +++ b/setup.py @@ -117,7 +117,8 @@ setup( 'pyyaml', 'argparse', 'argcomplete', - 'future' + 'future', + 'viivakoodi>=0.8' ], setup_requires=[ 'setuptools_scm', diff --git a/src/escpos/escpos.py b/src/escpos/escpos.py index 606a52c..0af1e55 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 BARCODE_FONT_A, BARCODE_FONT_B @@ -408,6 +411,31 @@ class Escpos(object): if function_type.upper() == "A": self._raw(NUL) + def soft_barcode(self, barcode_type, data, impl='bitImageColumn', + module_height=5, module_width=0.2, text_distance=1): + + image_writer = ImageWriter() + + # Check if barcode type exists + if barcode_type not in barcode.PROVIDED_BARCODES: + raise BarcodeTypeError( + 'Barcode type {} not supported by software barcode renderer' + .format(barcode_type)) + + # Render the barcode to a fake file + 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 + }) + + # Retrieve the Pillow image and print it + image = my_code.writer._image + self.image(image, impl=impl) + def text(self, txt): """ Print alpha-numeric text