🖨️ ESC/POS Printer driver for Node.js.
demo.mp4
[📢 RFC] Recently I'm working on a new workflow that prints the receipt. HTML+CSS will customize the content. Theoretically, we can print anything that we want. The workflow is like this:
- 🎨 rendering
<div id="label-dom"> Label/Receipt </div>
- 📸 capturing
const screenshort = await capture(document.getElementByID("label-dom"))
- 🧾 printing
const printer = await printer.image(screenshort, "s8")
printer.cut().close()
But my full-time job is very busy. So the progress is slow, And any sponsorship will encourage me to work more actively in the open-source community.
- 🛠 TypeScript.
- 📦 pnpm.
- 🟢 vitest.
- 🚀 More stable maintenance.
- 🔴 Printing by HTML+CSS(WIP).
- 💡 More ideas.
- ...
import { Printer, Image } from "@node-escpos/core";
// install escpos-usb adapter module manually
import USB from "@node-escpos/usb-adapter";
// Select the adapter based on your printer type
import { join } from "path";
const device = new USB();
device.open(async function(err){
if(err){
// handle error
return
}
// encoding is optional
const options = { encoding: "GB18030" /* default */ }
let printer = new Printer(device, options);
// Path to png image
const filePath = join("/PATH/TO/IMAGE");
const image = await Image.load(filePath);
printer
.font("a")
.align("ct")
.style("bu")
.size(1, 1)
.text("May the gold fill your pocket")
.text("恭喜发财")
.barcode(112233445566, "EAN13", { width: 50, height: 50 })
.table(["One", "Two", "Three"])
.tableCustom(
[
{ text: "Left", align: "LEFT", width: 0.33, style: "B" },
{ text: "Center", align: "CENTER", width: 0.33 },
{ text: "Right", align: "RIGHT", width: 0.33 },
],
{ encoding: "cp857", size: [1, 1] }, // Optional
)
// inject qrimage to printer
printer = await printer.qrimage("https://github.com/node-escpos/driver")
// inject image to printer
printer = await printer.image(
image,
"s8" // changing with image
)
printer
.cut()
.close()
});
- See
./examples/demo/test
for more examples.