Crate escpos

source ·
Expand description

escpos - A ESCPOS implementation in Rust

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.

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:

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

Simple text formatting

use escpos::printer::Printer;
use escpos::utils::*;
use escpos::{driver::*, errors::Result};

fn main() -> Result<()> {
    // env_logger::init();

    // let driver = NetworkDriver::open("192.168.1.248", 9100)?;
    let driver = ConsoleDriver::open(true);
    Printer::new(driver, Protocol::default())
        .debug_mode(Some(DebugMode::Dec))
        .init()?
        .smoothing(true)?
        .bold(true)?
        .underline(UnderlineMode::Single)?
        .writeln("Bold underline")?
        .justify(JustifyMode::CENTER)?
        .reverse(true)?
        .bold(false)?
        .writeln("Hello world - Reverse")?
        .feed()?
        .justify(JustifyMode::RIGHT)?
        .reverse(false)?
        .underline(UnderlineMode::None)?
        .size(2, 3)?
        .writeln("Hello world - Normal")?
        .print_cut()?;

    Ok(())
}

EAN13 (with barcode feature enabled)

use escpos::printer::Printer;
use escpos::utils::*;
use escpos::{driver::*, errors::Result};

fn main() -> Result<()> {
    // env_logger::init();

    // let driver = NetworkDriver::open("192.168.1.248", 9100)?;
    let driver = ConsoleDriver::open(true);
    Printer::new(driver, Protocol::default())
        .debug_mode(Some(DebugMode::Hex))
        .init()?
        .ean13_option(
            "1234567890265",
            BarcodeOption::new(
                BarcodeWidth::M,
                BarcodeHeight::S,
                BarcodeFont::A,
                BarcodePosition::Below,
            )
        )?
        .feed()?
        .print_cut()?;

    Ok(())
}

QR Code (with codes_2d feature enabled)

use escpos::printer::Printer;
use escpos::utils::*;
use escpos::{driver::*, errors::Result};

fn main() -> Result<()> {
    // env_logger::init();

    // let driver = NetworkDriver::open("192.168.1.248", 9100)?;
    let driver = ConsoleDriver::open(true);
    Printer::new(driver, Protocol::default())
        .debug_mode(Some(DebugMode::Hex))
        .init()?
        .qrcode_option(
            "https://www.google.com",
            QRCodeOption::new(QRCodeModel::Model1, 6, QRCodeCorrectionLevel::M),
        )?
        .feed()?
        .print_cut()?;

    Ok(())
}

Bit image (with graphics feature enabled)

use escpos::printer::Printer;
use escpos::utils::*;
use escpos::{driver::*, errors::Result};

fn main() -> Result<()> {
    // env_logger::init();

    // let driver = NetworkDriver::open("192.168.1.248", 9100)?;
    let driver = ConsoleDriver::open(true);
    let mut printer = Printer::new(driver, Protocol::default());
    printer.debug_mode(Some(DebugMode::Hex))
        .init()?
        .bit_image_option(
            "./resources/images/rust-logo-small.png",
            BitImageOption::new(Some(128), None, BitImageSize::Normal)?,
        )?
        .feed()?
        .print_cut()?;

    Ok(())
}

Features list

NameDescriptionDefault
barcodesPrint barcodes (UPC-A, UPC-E, EAN8, EAN13, CODE39, ITF or CODABAR)
codes_2dPrint 2D codes (QR Code, PDF417, GS1 DataBar, DataMatrix, etc.)
graphicsPrint raster images
fullEnable all features

Commands list

StatusCommandDescriptionFeature
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 optionbarcode
ean13_option()Print EAN13 with custom optionbarcode
ean8()Print EAN8 with default optionbarcode
ean8_option()Print EAN8 with custom optionbarcode
upca()Print UPC-A with default optionbarcode
upca_option()Print UPC-A with custom optionbarcode
upce()Print UPC-E with default optionbarcode
upce_option()Print UPC-E with custom optionbarcode
code39()Print CODE 39 with default optionbarcode
code39_option()Print CODE 39 with custom optionbarcode
codabar()Print CODABAR with default optionbarcode
codabar_option()Print CODABAR with custom optionbarcode
itf()Print ITF with default optionbarcode
itf_option()Print ITF with custom optionbarcode
qrcode()Print QR code with default optioncodes_2d
qrcode_option()Print QR code with custom optioncodes_2d
bit_image()Print raster bit image with default optiongraphics
bit_image_option()Print raster bit image with custom optiongraphics
gs1_databar_2dPrint 2D GS1 DataBar with default optioncodes_2d
gs1_databar_2d_optionPrint 2D GS1 DataBar with custom optioncodes_2d
pdf417Print PDF417 with default optioncodes_2d
pdf417_optionPrint PDF417 with custom optioncodes_2d
maxi_codePrint MaxiCode with default optioncodes_2d
maxi_code_optionPrint MaxiCode with custom optioncodes_2d
data_matrixPrint DataMatrix with default optioncodes_2d
data_matrix_optionPrint DataMatrix with custom optioncodes_2d
aztecPrint Aztec code with default optioncodes_2d
aztec_optionPrint Aztec code with custom optioncodes_2d
🚧graphic()Print raster graphic with default optiongraphics
🚧graphic_option()Print raster graphic with custom optiongraphics
  • ✅ Done
  • 🚧 In progress
  • ❌ To do

External resources

Modules

  • Drivers used to send data to the printer (Network or USB) Drivers used to send data to the printer (Network or USB)
  • Error module Custom error
  • Print document Printer
  • Utils module contains protocol and all needed constants and enums