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
- Flutter Bluetooth printing: esc_pos_bluetooth
- 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...).
List<int> testTicket() {
finalList<int> bytes = [];
// Using default profilefinal profile =awaitCapabilityProfile.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;
}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),
),
]);This package implements 3 ESC/POS functions:
ESC *- print in column formatGS 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.
import'dart:io';
import'package:image/image.dart';
finalByteData data =await rootBundle.load('assets/logo.png');
finalUint8List bytes = data.buffer.asUint8List();
finalImage 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);finalList<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
generator.barcode(Barcode.upcA(barData));Using native ESC/POS commands:
generator.qrcode('example.com');To print a QR Code as an image (if your printer doesn't support native commands), add qr_flutter and path_provider as a dependency in your pubspec.yaml file.
String qrData ="google.com";
constdouble qrSize =200;
try {
final uiImg =awaitQrPainter(
data: qrData,
version:QrVersions.auto,
gapless:false,
).toImageData(qrSize);
final dir =awaitgetTemporaryDirectory();
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);
}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:
// Xprinter XP-N160Ifinal profile =awaitCapabilityProfile.load('XP-N160I');
final generator =Generator(PaperSize.mm80, profile);
bytes += generator.setGlobalCodeTable('CP1252');All available profiles can be retrieved by calling :
final profiles =awaitCapabilityProfile.getAvailableProfiles();- Add a CapabilityProfile to support your printer's model. A new profile should be added to
lib/resources/capabilities.jsonfile - Test your printer and add it in the table: Wifi/Network printer or Bluetooth printer
- Test and report bugs
- Share your ideas about what could be improved (code optimization, new features...)