π¨οΈ 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/testfor more examples.
