Skip to content

Repository files navigation

Cat Printer SDK

The Cat Printer SDK is a powerful JavaScript library that brings the convenience of Bluetooth connectivity to your web applications. Connect to affordable portable mini thermal printers (commonly known as Cat Printers) to print text, images, and more programmatically without using the vendor's mobile app.

⚠️Warning: This library has been tested only on select printer models. We highly recommend trying the demo to verify compatibility before deploying in production.

Features

  • Bluetooth Connectivity: Easily connect to your thermal printer using Web Bluetooth.
  • Text Printing: Customize font family, size, weight, alignment, and more for professional output.
  • Image Printing with Multiple Dithering Methods: Convert images to black and white using various methods:
    • Threshold: Simple brightness cutoff.
    • Bayer: Uses an ordered Bayer matrix for a patterned effect.
    • Floyd-Steinberg: Implements error diffusion for smoother gradients.
    • Dot Dithering: Additional technique for more artistic or technical effects.
  • Printer Control: Adjust print settings such as speed, energy, and paper feed.
  • State Monitoring: Check printer conditions like paper status, cover position, temperature, battery level, and more.
  • Queue Support: Manage and print multiple items in sequence to streamline your printing workflow.

Installation

Get started in seconds by installing the Cat Printer SDK using your favorite package manager:

NPM

npm install @opuu/cat-printer

Yarn

yarn add @opuu/cat-printer

PNPM

pnpm add @opuu/cat-printer

Bun

bun add @opuu/cat-printer

Quick Start

Below is a simple example demonstrating how to connect to a Cat Printer, print text and an image, and then gracefully disconnect.

import{CatPrinter}from'@opuu/cat-printer';// Create a new instance with debug logging enabledconstprinter=newCatPrinter({debug: true});// Connect to the printerasyncfunctionconnectPrinter(){try{awaitprinter.connect();console.log('Connected to printer!');// Print text with custom optionsawaitprinter.printText('Hello World!',{fontSize: 24,fontWeight: 'bold',align: 'center',lineSpacing: 8});// Print an image using Floyd-Steinberg ditheringawaitprinter.printImage('https://example.com/image.jpg',{dither: 'floyd-steinberg'});// Feed the paper to finalize the printing jobawaitprinter.feed(100);// Disconnect when the job is doneawaitprinter.disconnect();}catch(error){console.error('Error during printing:',error);}}// Bind the connect function to a button click eventdocument.getElementById('connectButton').addEventListener('click',connectPrinter);

API Reference

Class: CatPrinter

The CatPrinter class offers all methods needed to interact with a thermal printer via Bluetooth.

Constructor

newCatPrinter(options?: PrinterOptions)

PrinterOptions:

OptionTypeDefaultDescription
debugbooleanfalseEnable debug logging
speednumber32Default print speed
energynumber24000Default print energy/density
finishFeednumber100Default lines to feed after printing

Methods

Connection Management

  • connect(): Promise
    Connects to the printer via Bluetooth.

  • disconnect(): Promise
    Disconnects from the printer.

  • isConnected(): boolean
    Returns the current connection status.

  • getState(): PrinterState
    Retrieves detailed printer state.

Printing Operations

  • printText(text: string, options?: TextOptions): Promise
    Prints text with customizable formatting.

  • printImage(imageUrl: string, options?: ImageOptions): Promise
    Prints an image using a specified dithering method.

  • printMultiple(items: Array<{type: 'text' | 'image', content: string, options?: TextOptions | ImageOptions}>): Promise
    Prints multiple items in a queued sequence.

Paper Control

  • feed(lines: number): Promise
    Advances the paper by the specified number of lines.

  • retract(lines: number): Promise
    Retracts available paper by the given number of lines.

Printer Settings

  • setSpeed(speed: number): Promise
    Adjusts the printing speed.

  • setEnergy(energy: number): Promise
    Adjusts the print energy/density.

  • prepare(speed: number, energy: number): Promise
    Sets up both speed and energy simultaneously.

  • finish(feed: number): Promise
    Completes printing with a final paper feed.

Options Types

TextOptions

OptionTypeDescription
fontFamilystringFont family for the text
fontSizenumberFont size in pixels
fontWeightstringFont weight (e.g., 'normal', 'bold')
align'start' | 'center' | 'end' | 'justified'Text alignment
lineSpacingnumberLine spacing in pixels
rotatenumberRotation angle in degrees
flipHbooleanFlip text horizontally
flipVbooleanFlip text vertically
brightnessnumberBrightness threshold (0-255)
offsetnumberOptional paper feed/retract adjustment

ImageOptions

OptionTypeDescription
dither'none' | 'threshold' | 'bayer' | 'floyd-steinberg' | 'dot'Dithering algorithm to convert images
rotatenumberRotation angle in degrees
flipHbooleanFlip the image horizontally
flipVbooleanFlip the image vertically
brightnessnumberBrightness threshold (0-255)
offsetnumberPaper feed/retract adjustment before printing

PrinterState

PropertyTypeDescription
outOfPaperbooleanTrue when the printer is out of paper
coverOpenbooleanTrue when the printer's cover is open
overheatbooleanTrue when the printer is overheated
lowPowerbooleanTrue when the battery is low
pausedbooleanTrue when the printer is paused
busybooleanTrue when the printer is busy

Dithering Options

When printing images, the SDK converts images to black and white using various dithering techniques. Each method offers a unique visual style and performance characteristics:

  • threshold: Applies a simple brightness threshold.
  • bayer: Uses an ordered Bayer matrix to generate a patterned effect.
  • floyd-steinberg: Uses error diffusion for smooth gradient transitions.
  • dot: Additional technique offering distinct stylistic results; ideal for creative outputs.

Dithering Previews

Below are previews showcasing the visual effects of different dithering methods. (Note: Replace the image URLs with actual examples as needed.)

Dithering MethodPreview
NoneNo Dithering
ThresholdThreshold Dithering
BayerBayer Dithering
Floyd-SteinbergFloyd-Steinberg Dithering
DotDot Dithering

Browser Compatibility

The Cat Printer SDK leverages the Web Bluetooth API, which is currently supported in:

  • Chrome
  • Edge
  • Opera

Please note that Safari and Firefox do not offer native support for the Web Bluetooth API, all chromium-based browsers should work fine.

Contributing

We welcome contributions! If you have suggestions, bug reports, or feature requests, please open an issue or submit a pull request.

Supported Printers

  • GB01
  • GB02
  • GB03
  • GT01
  • YT01
  • MX05
  • MX06
  • MX08
  • MX10
  • X5

Inspired By

License

Distributed under the AGPL-3.0 license. See the LICENSE file for details.

About

Cat Printer SDK: Manage Chinese Cat Printers Using Bluetooth in Browser

Topics

Resources

Stars

26 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages