Giter Club home page Giter Club logo

pyescpos's Introduction

PyESCPOS

Development status Supported Python versions License Latest version

A Python support for Epson© ESC/POS® compatible printers. Read more at Epson ESCPOS FAQ (PDF document).

This project is inspired on Manuel F. Martinez work for python-escpos implementation, among other projects, whose specific bits of work (available here on Github and many other open-source repositories) has helped so much.

The ESC/POS® is a standard that every manufacturer tend to modify to suit their (even already implemented) needs. Indeed, there is no standard but something awkward, an illusion of a standard. On the surface, one can say that it's pretty much the same, but when you look just a little bit more deeper, you quickly realize that they are almost completely different, even between models belonging to the same manufacturer.

This project aims to make viable the use, at the point-of-sale (POS), of different printers (the most common ones, at least) that are minimally based on ESC/POS® standard, without need to modify the client application code. To achieve this, it is necessary to draw a lowest common denominator between features and provide implementations that seek to meet this minimum. At this stage of the project, "minimum" is still a fuzzy word.

Tested Hardware

Current implementation was tested against following hardwares:

Manufacturer Models Firmware Versions
Epson TM-T20 1.14
Elgin Elgin i9 CV1.03.20
Urmet Daruma DR700 L/H/M and DR700 L-e/H-e 02.51.00, 01.20.00, 01.21.00
Bematech S/A MP-4200 TH 1.3, 1.6

Example Usage

Serial RS232 Example

Serial communications support requires PySerial version 2.7 or later.

from escpos.serial import SerialSettings
from escpos.impl.epson import GenericESCPOS

# assumes RTS/CTS for 'ttyS5' and infers an instance of RTSCTSConnection
conn = SerialSettings.as_from('/dev/ttyS5:9600,8,1,N').get_connection()
printer = GenericESCPOS(conn)
printer.init()
printer.text('Hello World!')

USB Example

USB support requires PyUSB.

# TODO: USB support example.

Bluetooth Example

Bluetooth support requires PyBlueZ (not yet implemented).

from escpos.bluetooth import BluetoothConnection
from escpos.impl.epson import GenericESCPOS

printer = GenericESCPOS(BluetoothConnection('01:0a:02:0b:03:0c'))
printer.init()
printer.text('Hello World!')

Printing Barcodes

There is a default set of parameters for printing barcodes. Each ESC/POS implementation will take care of the details and try their best to print your barcode as you asked.

from escpos import barcode
from escpos.serial import SerialSettings
from escpos.impl.epson import GenericESCPOS

conn = SerialSettings.as_from('COM1:9600:8:1:N').get_connection()
printer = GenericESCPOS(conn)
printer.init()
printer.code128('0123456789',
        barcode_height=96, # ~12mm (~1/2")
        barcode_width=barcode.BARCODE_DOUBLE_WIDTH,
        barcode_hri=barcode.BARCODE_HRI_BOTTOM)

printer.lf()

printer.ean13('4007817525074',
        barcode_height=120, # ~15mm (~9/16"),
        barcode_width=barcode.BARCODE_NORMAL_WIDTH,
        barcode_hri=barcode.BARCODE_HRI_TOP)

printer.cut()

The barcode data should be complete, that is, an EAN-13 barcode is formed from twelve digits plus check-digit. Most of the ESC/POS commands implementations requires only twelve digits and automaticaly calculate the check-digit. If you are dealing with, say, EAN-13 codes without the thirteenth-digit (the check-digit) just append zero (0) to the barcode class (or method) argument, so they can pass RE validation.

printer.ean13('4007817525074')  # is OK
printer.ean13('400781752507')   # raises ValueError
printer.ean13('4007817525070')  # is OK and prints 4007817525074 as expected

Disclaimer

It is important that you read this disclaimer.

None of the vendors or manufacturers cited in this entire project agree or endorse any of the patterns or implementations used. its names are used only where it makes sense and/or to maintain context.

pyescpos's People

Contributors

danielgoncalves avatar victormelo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.