🖨️ esc/pos implementation in gleam
at main 79 lines 1.7 kB view raw view rendered
1# escpos 2 3[![Package Version](https://img.shields.io/hexpm/v/escpos)](https://hex.pm/packages/escpos) 4[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/escpos/) 5 6ESC/POS library for Gleam. 7 8Implements a subset of ESC/POS commands for controlling receipt printers. 9 10[ESC/POS Specification](https://download4.epson.biz/sec_pubs/pos/reference_en/escpos/commands.html) 11 12```sh 13gleam add escpos@1 14``` 15 16## Usage 17 18### Declarative API 19 20The `escpos/document` module provides a high-level declarative API: 21 22```gleam 23import escpos/document.{bold, cut, justify, line, styled, text, Center} 24import escpos/printer 25 26pub fn main() { 27 let assert Ok(printer) = printer.device("/dev/usb/lp0") 28 29 document.render([ 30 styled([justify(Center), bold()], [ 31 line([text("Receipt")]), 32 ]), 33 line([text("Item 1 ... $5.00")]), 34 line([text("Item 2 ... $3.50")]), 35 cut(), 36 ]) 37 |> printer.print(printer) 38} 39``` 40 41### Imperative API 42 43The `escpos` module provides a lower-level builder-style API: 44 45```gleam 46import escpos.{Center, Left} 47import escpos/printer 48 49pub fn main() { 50 let assert Ok(printer) = printer.device("/dev/usb/lp0") 51 52 escpos.new() 53 |> escpos.reset() 54 |> escpos.align(Center) 55 |> escpos.bold(True) 56 |> escpos.writeln("Receipt") 57 |> escpos.bold(False) 58 |> escpos.align(Left) 59 |> escpos.writeln("Item 1 ... $5.00") 60 |> escpos.writeln("Item 2 ... $3.50") 61 |> escpos.line_feed(3) 62 |> escpos.cut() 63 |> printer.print(printer) 64} 65``` 66 67Further documentation can be found at <https://hexdocs.pm/escpos>. 68 69## Development 70 71```sh 72gleam run # Run the project 73gleam dev # Experiment with a printer 74gleam test # Run the tests 75``` 76 77## Todo 78 79- Some way to justify between text, work in `justify-between` branch