This project provides an implementation for a subset of Epson's ESC/POS protocol used by compatible receipt printers. It can generate and print receipts that include basic formatting, barcodes, graphics and cutting functions on a compatible printer.
let driver = NetworkDriver::open("127.0.0.1", 9100)?;
let mut printer = Printer::open(driver)?;
printer.init()?
.align(Alignment::Center)?
.text_size(4, 4)?
.text("Hello World")?
.feed(2)?
.graphic(move |builder| {
builder.path("resources/rust-logo.png")
.size(GraphicSize::Normal)
})?
.feed(4)?
.cut()?;
Refer to the examples directory for further instances of usage.
For the sake of simplicity, the examples will print their output to the console.
To launch an example, use the following command:
cargo run --example graphic --features "graphics" --quiet
If you wish to direct an example's output to a network printer, you can employ the netcat command:
cargo run --example text | nc 192.168.0.100 9100
For standard functionalities (e.g. printing text, barcodes, qr codes etc.), no additional dependencies are required:
[dependencies]
recibo = "1.0.0"
If you would like to raster images, you will need to enable the image
feature:
[dependencies]
recibo = { version = "1.0.0", features = ["graphics"] }
You can also enable deserialisation and serialisation using serde if you enable the feature:
[dependencies]
recibo = { version = "1.0.0", features = ["serde"] }
The library provides two adapters for communicating with the printer:
This is used for establishing communication with a network printer
let driver = NetworkDriver::open("192.168.0.100", 9100)?;
let printer = Printer::open(driver)?;
This is used when interacting with a serial printer or writing to a file
let driver = FileDriver::open("/tmp/output.bin")?;
let printer = Printer::open(driver)?;
This is used for writing the output to the console
let driver = ConsoleDriver::open();
let printer = Printer::open(driver)?;
Some of the commands may not be supported by your printer
Command | Description |
---|---|
init | Initializes the printer. |
reset | Resets the printer to its default settings. |
align | Aligns the text to the left, right, or center. |
left | Sets the left margin to n dots. |
width | Sets the printable area width. |
font | Sets the font to either style 'a', 'b', or 'c'. |
bold | Sets the emphasis of the text to bold. |
text_size | Sets the font size of the text. |
reset_text_size | Resets the font size of the text. |
underline | Underlines the text with a single or double stroke. |
doublestrike | Applies a double-strike effect to the text. |
linespacing | Adjusts the spacing between lines of text. |
reset_linespacing | Resets the line spacing to the default value. |
flip | Turns the text upside down. |
reverse_colours | Enables white text on a black background. |
qr | Prints a QR Code. |
barcode | Prints a barcode. |
graphic | Prints a graphic. |
feed | Feeds n lines of paper. |
reverse_feed | Reverses the paper feed by n lines. |
cut | Performs a full cut of the paper. |
partial_cut | Performs a partial cut of the paper. |
Prints the specified text. | |
println | Prints the specified text with a new line ending. |
text | Same as println, prints the specified text with a new line ending. |
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details