Home
Softono
w

wwandreww

Professional software vendor delivering innovative solutions on the Softono platform. Specialized in both open-source and proprietary software development.

Total Products
3

Software by wwandreww

esc_pos_printer
Open Source

esc_pos_printer

Arduino ESC POS printer library

IoT & Embedded Mobile Development Web Servers
57 Github Stars
esc_pos_bluetooth
Open Source

esc_pos_bluetooth

# esc_pos_bluetooth [![Pub Version](https://img.shields.io/pub/v/esc_pos_bluetooth)](https://pub.dev/packages/esc_pos_bluetooth) The library allows to print receipts using a Bluetooth printer. For WiFi/Ethernet printers, use [esc_pos_printer](https://github.com/andrey-ushakov/esc_pos_printer) library. ## TODO (PRs are welcomed!) * Split byte data into chunks: [issue](https://github.com/andrey-ushakov/esc_pos_bluetooth/issues/5) * Print QR Codes using the `GS ( k` command (printing QR code from an image already supported) * PDF-417 Barcodes using the `GS ( k` command * Line spacing using the `ESC 3 <n>` command ## How to Help * Test your printer and add it in the table: [Wifi/Network printer](https://github.com/andrey-ushakov/esc_pos_printer/blob/master/printers.md) or [Bluetooth printer](https://github.com/andrey-ushakov/esc_pos_bluetooth/blob/master/printers.md) * Test and report bugs * Share your ideas about what could be improved (code optimization, new features...) * PRs are welcomed! ## Tested Printers Here are some [printers tested with this library](printers.md). Please add the models you have tested to maintain and improve this library and help others to choose the right printer. ## Generate a Ticket ### Simple Ticket with Styles: ```dart Ticket testTicket() { final Ticket ticket = Ticket(PaperSize.mm80); ticket.text( 'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ'); ticket.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ', styles: PosStyles(codeTable: PosCodeTable.westEur)); ticket.text('Special 2: blåbærgrød', styles: PosStyles(codeTable: PosCodeTable.westEur)); ticket.text('Bold text', styles: PosStyles(bold: true)); ticket.text('Reverse text', styles: PosStyles(reverse: true)); ticket.text('Underlined text', styles: PosStyles(underline: true), linesAfter: 1); ticket.text('Align left', styles: PosStyles(align: PosAlign.left)); ticket.text('Align center', styles: PosStyles(align: PosAlign.center)); ticket.text('Align right', styles: PosStyles(align: PosAlign.right), linesAfter: 1); ticket.text('Text size 200%', styles: PosStyles( height: PosTextSize.size2, width: PosTextSize.size2, )); ticket.feed(2); ticket.cut(); return ticket; } ``` You can find more examples here: [esc_pos_utils](https://github.com/andrey-ushakov/esc_pos_utils). ## Print a Ticket ```dart PrinterBluetoothManager printerManager = PrinterBluetoothManager(); printerManager.scanResults.listen((printers) async { // store found printers }); printerManager.startScan(Duration(seconds: 4)); // ... printerManager.selectPrinter(printer); final PosPrintResult res = await printerManager.printTicket(testTicket()); print('Print result: ${res.msg}'); ``` For a complete example, check the demo project [example/blue](example/blue). ## Troubleshooting * If your printer prints only 5%-10% of an image and then stops, or it can't print more than 1 image on the same ticket, or it can't print long tickets, try to ajust `queueSleepTimeMs` of the `PrinterBluetoothManager.printTicket` (try 50 or 100ms): `printerManager.printTicket(await demoReceipt(paper), queueSleepTimeMs: 50);` ## Test Print <img src="https://github.com/andrey-ushakov/esc_pos_printer/blob/master/example/receipt2.jpg?raw=true" alt="test receipt" height="800"/> <img src="https://github.com/andrey-ushakov/esc_pos_printer/blob/master/example/receipt.jpg?raw=true" alt="test receipt" height="500"/>

Mobile Development
270 Github Stars
esc_pos_utils
Open Source

esc_pos_utils

# esc_pos_utils [![Pub Version](https://img.shields.io/pub/v/esc_pos_utils)](https://pub.dev/packages/esc_pos_utils) Base Flutter/Dart classes for ESC/POS printing. `Generator` class generates ESC/POS commands that can be sent to a thermal printer. This is the "base" library that used for: - Flutter WiFi/Ethernet printing: [esc_pos_printer](https://github.com/andrey-ushakov/esc_pos_printer) - Flutter Bluetooth printing: [esc_pos_bluetooth](https://github.com/andrey-ushakov/esc_pos_bluetooth) ## Main Features - Connect to Wi-Fi / Ethernet printers - Simple text printing using _text_ method - Tables printing using _row_ method - Text styling: - size, align, bold, reverse, underline, different fonts, turn 90° - Print images - Print barcodes - UPC-A, UPC-E, JAN13 (EAN13), JAN8 (EAN8), CODE39, ITF (Interleaved 2 of 5), CODABAR (NW-7), CODE128 - Paper cut (partial, full) - Beeping (with different duration) - Paper feed, reverse feed **Note**: Your printer may not support some of the presented features (some styles, partial/full paper cutting, reverse feed, barcodes...). ## Generate a Ticket ### Simple ticket with styles: ```dart List<int> testTicket() { final List<int> bytes = []; // Using default profile final profile = await CapabilityProfile.load(); final generator = Generator(PaperSize.mm80, profile); List<int> bytes = []; bytes += generator.text( 'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ'); bytes += generator.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ', styles: PosStyles(codeTable: PosCodeTable.westEur)); bytes += generator.text('Special 2: blåbærgrød', styles: PosStyles(codeTable: PosCodeTable.westEur)); bytes += generator.text('Bold text', styles: PosStyles(bold: true)); bytes += generator.text('Reverse text', styles: PosStyles(reverse: true)); bytes += generator.text('Underlined text', styles: PosStyles(underline: true), linesAfter: 1); bytes += generator.text('Align left', styles: PosStyles(align: PosAlign.left)); bytes += generator.text('Align center', styles: PosStyles(align: PosAlign.center)); bytes += generator.text('Align right', styles: PosStyles(align: PosAlign.right), linesAfter: 1); bytes += generator.text('Text size 200%', styles: PosStyles( height: PosTextSize.size2, width: PosTextSize.size2, )); bytes += generator.feed(2); bytes += generator.cut(); return bytes; } ``` ### Print a table row: ```dart generator.row([ PosColumn( text: 'col3', width: 3, styles: PosStyles(align: PosAlign.center, underline: true), ), PosColumn( text: 'col6', width: 6, styles: PosStyles(align: PosAlign.center, underline: true), ), PosColumn( text: 'col3', width: 3, styles: PosStyles(align: PosAlign.center, underline: true), ), ]); ``` ### Print an image: This package implements 3 ESC/POS functions: - `ESC *` - print in column format - `GS v 0` - print in bit raster format (obsolete) - `GS ( L` - print in bit raster format Note that your printer may support only some of the above functions. ```dart import 'dart:io'; import 'package:image/image.dart'; final ByteData data = await rootBundle.load('assets/logo.png'); final Uint8List bytes = data.buffer.asUint8List(); final Image image = decodeImage(bytes); // Using `ESC *` generator.image(image); // Using `GS v 0` (obsolete) generator.imageRaster(image); // Using `GS ( L` generator.imageRaster(image, imageFn: PosImageFn.graphics); ``` ### Print a Barcode: ```dart final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4]; generator.barcode(Barcode.upcA(barData)); ``` ### Print a QR Code: Using native ESC/POS commands: ```dart generator.qrcode('example.com'); ``` To print a QR Code as an image (if your printer doesn't support native commands), add [qr_flutter](https://pub.dev/packages/qr_flutter) and [path_provider](https://pub.dev/packages/path_provider) as a dependency in your `pubspec.yaml` file. ```dart String qrData = "google.com"; const double qrSize = 200; try { final uiImg = await QrPainter( data: qrData, version: QrVersions.auto, gapless: false, ).toImageData(qrSize); final dir = await getTemporaryDirectory(); final pathName = '${dir.path}/qr_tmp.png'; final qrFile = File(pathName); final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List()); final img = decodeImage(imgFile.readAsBytesSync()); generator.image(img); } catch (e) { print(e); } ``` ## Using Code Tables Different printers support different sets of code tables. Some printer models are defined in `CapabilityProfile` class. So, if you want to change the default code table, it's important to choose the right profile: ```dart // Xprinter XP-N160I final profile = await CapabilityProfile.load('XP-N160I'); final generator = Generator(PaperSize.mm80, profile); bytes += generator.setGlobalCodeTable('CP1252'); ``` All available profiles can be retrieved by calling : ```dart final profiles = await CapabilityProfile.getAvailableProfiles(); ``` ## How to Help - Add a CapabilityProfile to support your printer's model. A new profile should be added to `lib/resources/capabilities.json` file - Test your printer and add it in the table: [Wifi/Network printer](https://github.com/andrey-ushakov/esc_pos_printer/blob/master/printers.md) or [Bluetooth printer](https://github.com/andrey-ushakov/esc_pos_bluetooth/blob/master/printers.md) - Test and report bugs - Share your ideas about what could be improved (code optimization, new features...)

Mobile Development
168 Github Stars