ESC/POS Rust implementation
This crate implements a subset of Epson's ESC/POS protocol for thermal receipt printers. It allows you to generate and print documents with basic text formatting, cutting, barcodes, QR codes and raster images on a compatible printer.
Printed on Aures ODP 333
This project is strongly inspired by recibo ( Rust), escposify (Rust) and escpos (Go).
Installation
For standard functionalities (e.g. printing text), no additional dependencies are required:
[]
= "0.7.0"
If you need all features, you can use the full
feature:
[]
= { = "0.7.0", = ["full"] }
Or you can use cargo add
command:
Features list
Name | Description | Default |
---|---|---|
barcodes |
Print barcodes (UPC-A, UPC-E, EAN8, EAN13, CODE39, ITF or CODABAR) | ✅ |
codes_2d |
Print 2D codes (QR Code, PDF417, GS1 DataBar, DataMatrix, Aztec, etc.) | ✅ |
graphics |
Print raster images | ❌ |
full |
Enable all features | ❌ |
Examples
The examples
folder contains various examples of how to use escpos
.
The docs (will) also provide lots of code snippets and examples.
To launch an example, use the following command:
RUST_LOG=debug cargo run --example full --features "full"
RUST_LOG=debug cargo run --example receipt -F full
RUST_LOG=debug cargo run --example codes
RUST_LOG=debug cargo run --example debug
RUST_LOG=debug cargo run --example page_codes
Simple text formatting
use Printer;
use *;
use ;
EAN13
use Printer;
use *;
use ;
QR Code
use Printer;
use *;
use ;
Bit image (with graphics
feature enabled)
use Printer;
use *;
use ;
Commands list
Status | Command | Description | Feature |
---|---|---|---|
✅ | init() |
Initialize printer (ESC @ ) |
|
✅ | print() |
Print document | |
✅ | reset() |
Hardware reset (ESC ? LF 0 ) |
|
✅ | cut() |
Paper cut (GS V A 0 ) |
|
✅ | partial_cut() |
Partial paper cut (GS V A 1 ) |
|
✅ | print_cut() |
Print and paper cut | |
✅ | page_code() |
Select character code table (ESC t ) |
|
✅ | character_set() |
Select an international character set (ESC R ) |
|
✅ | bold() |
Text bold (ESC E ) |
|
✅ | underline() |
Text underline (ESC - ) |
|
✅ | double_strike() |
Text double strike (ESC G ) |
|
✅ | font() |
Text font (ESC M ) |
|
✅ | flip() |
Text flip (ESC V ) |
|
✅ | justify() |
Text justify (ESC a ) |
|
✅ | reserve() |
Text reserve color (GS B ) |
|
✅ | size() |
Text size (GS ! ) |
|
✅ | reset_size() |
Reset text size (GS ! ) |
|
✅ | smoothing() |
Smoothing mode (GS b ) |
|
✅ | feed() |
Line feed (ESC d ) |
|
✅ | feeds() |
Multiple lines feed (ESC d ) |
|
✅ | line_spacing() |
Line spacing (ESC 3 ) |
|
✅ | reset_line_spacing() |
Reset line spacing (ESC 2 ) |
|
✅ | upside_down() |
Upside-down mode (ESC { ) |
|
✅ | cash_drawer() |
Generate pulse (ESC p ) |
|
✅ | write() |
Write text | |
✅ | writeln() |
Write text and line feed | |
✅ | custom() |
Custom command | |
✅ | custom_with_page_code() |
Custom command with page code | |
✅ | motion_units() |
Set horizontal and vertical motion units (GS P ) |
|
✅ | ean13() |
Print EAN13 with default option | barcode |
✅ | ean13_option() |
Print EAN13 with custom option | barcode |
✅ | ean8() |
Print EAN8 with default option | barcode |
✅ | ean8_option() |
Print EAN8 with custom option | barcode |
✅ | upca() |
Print UPC-A with default option | barcode |
✅ | upca_option() |
Print UPC-A with custom option | barcode |
✅ | upce() |
Print UPC-E with default option | barcode |
✅ | upce_option() |
Print UPC-E with custom option | barcode |
✅ | code39() |
Print CODE 39 with default option | barcode |
✅ | code39_option() |
Print CODE 39 with custom option | barcode |
✅ | codabar() |
Print CODABAR with default option | barcode |
✅ | codabar_option() |
Print CODABAR with custom option | barcode |
✅ | itf() |
Print ITF with default option | barcode |
✅ | itf_option() |
Print ITF with custom option | barcode |
✅ | qrcode() |
Print QR code with default option | codes_2d |
✅ | qrcode_option() |
Print QR code with custom option | codes_2d |
✅ | bit_image() |
Print raster bit image with default option | graphics |
✅ | bit_image_option() |
Print raster bit image with custom option | graphics |
✅ | gs1_databar_2d |
Print 2D GS1 DataBar with default option | codes_2d |
✅ | gs1_databar_2d_option |
Print 2D GS1 DataBar with custom option | codes_2d |
✅ | pdf417 |
Print PDF417 with default option | codes_2d |
✅ | pdf417_option |
Print PDF417 with custom option | codes_2d |
✅ | maxi_code |
Print MaxiCode with default option | codes_2d |
✅ | maxi_code_option |
Print MaxiCode with custom option | codes_2d |
✅ | data_matrix |
Print DataMatrix with default option | codes_2d |
✅ | data_matrix_option |
Print DataMatrix with custom option | codes_2d |
✅ | aztec |
Print Aztec code with default option | codes_2d |
✅ | aztec_option |
Print Aztec code with custom option | codes_2d |
🚧 | graphic() |
Print raster graphic with default option | graphics |
🚧 | graphic_option() |
Print raster graphic with custom option | graphics |
- ✅ Done
- 🚧 In progress
- ❌ To do
External resources
Todo
- Complete
README.md
- Complete documentation
- Add tests
- Improve
receipt.rs
- Add more commands:
- Graphic (Ex.:
GS 8 L
orGS ( L
) - Others 2D codes:
- GS1 DataBar
- PDF157
- DataMatrix
- MaxiCode
- Aztec Code
- Graphic (Ex.: