🖨️ esc/pos implementation in gleam
1# escpos
2
3[](https://hex.pm/packages/escpos)
4[](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