Originally forked from here
Cross platform JavaScript library that implements the thermal printer ESC / POS protocol and provides an XML interface for preparing templates for printing.
- Text
- Text line
- Feed line
- Bold text
- Underline text
- Font size
- Small mode
- White mode
- Align
- Barcode
- QRcode
- Paper cut node
- Image (base64) (png only)
- XML with mustache
- React Native (Android)
- React Native (iOS)
- React Native Web
- Server side (NodeJs)
- Desktop applications (nwjs & electron)
- Other node environment (terminal)
  yarn add @tillpos/xml-escpos-helperimport { EscPos } from '@tillpos/xml-escpos-helper';
// store this template somewhere `s3` or as `static asset` based on your preference 
const template = `
  <?xml version="1.0" encoding="UTF-8"?>
  <document>
    <align mode="center">
      <bold>
        <text-line size="1:0">{{title}}</text-line>
      </bold>
    </align>
    {{#thankyouNote}}
    <align mode="center">
      <text-line size="0:0">  {{{thankyouNote}}}</text-line>
    </align>
    <line-feed />
    <paper-cut />
  </document>
`;
const input = {
  title: 'Sample',
  thankyouNote: 'Welcome...!'
};
const buffer = EscPos.getBufferFromTemplate(template, input);
// send this buffer to a stream (eg.: bluetooth or wifi)  const template =  `<?xml version="1.0" encoding="UTF-8"?>
  <document>
    <align mode="center">
      <bold>
        <text-line size="1:0">{{title}}</text-line>
      </bold>
        
      <image density="d24">
        {{base64PngImage}}
      </image>
    </align>    
  </document>`;
  const input = {
    title: 'PNG - base64',
    base64PngImage: `data:image/png;base64,iVBORw0KGgoAAA+P/AaNn2GPEMgEFAAAAAElFTkSuQmCC`
  };
  const buffer = EscPos.getBufferFromTemplate(template, input);- Font styles (font family)
- Image bitmap conversion improvements
- jpeg support
- Add example apps to repo
- Removed uglify for some reason, need to bring it back
- Improve image rendering
- If there is any delay you observe while printing with this library it is mostly due to image manipulations (try without image 😷 )
- ESC / POS Commands manual
- A blog post explaiing about printing images with ESCPOS
- Similar library for serverside - node-escpos.
Limitations on the react-native framework
- FileReader.readAsArrayBuffer was not implemented.
- Most of popular image manupulation libraries does not have support for react-native. eg : jimp, jpeg-js and sharp. We can use these libraries with some native node lib implemented in react native (some sort of polyfill).
- For png this library seems to be faster, but when tested this library with it, it is not retaining pixels at some places)
- Use this node-libs-react-native if we need to use this library in react native (adds some mock or js implementation for fs, stream etc)
Contributions of any kind welcome! ❤️