aman-satu-flutter/lib/core/utils/pos_printer.dart

104 lines
3.0 KiB
Dart

import 'dart:typed_data';
import 'package:charset_converter/charset_converter.dart';
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bluetooth_basic/flutter_bluetooth_basic.dart';
import 'package:image/image.dart';
import 'package:satu/core/models/settings/printer_setting.dart';
Future<List<int>> getReceipt(String encoding, String paperSize) async {
final profile = await CapabilityProfile.load();
final generator = Generator(
paperSize == PrinterConst.paperSize58mm ? PaperSize.mm58 : PaperSize.mm80,
profile,
);
String codeTable = 'CP866';
if(encoding == PrinterConst.encodingCP866) {
codeTable = 'CP866';
} else if(encoding == PrinterConst.encodingCP1251) {
codeTable = 'CP1251';
}
List<int> bytes = [];
generator.setGlobalCodeTable(codeTable);
final Uint8List firstCol =
await CharsetConverter.encode(encoding.toLowerCase(), 'Тестовый чек');
bytes += generator.textEncoded(firstCol);
bytes +=
generator.text('CENTER', styles: const PosStyles(align: PosAlign.center));
bytes += generator.text('Right',
styles: const PosStyles(align: PosAlign.right), linesAfter: 1);
bytes += generator.row([
PosColumn(
text: 'col3',
width: 3,
styles: const PosStyles(align: PosAlign.center, underline: true),
),
PosColumn(
text: 'col6',
width: 6,
styles: const PosStyles(align: PosAlign.center, underline: true),
),
PosColumn(
text: 'col3',
width: 3,
styles: const PosStyles(align: PosAlign.center, underline: true),
),
]);
bytes += generator.text(
'Text size 200%',
styles: const PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
),
);
// Print barcode
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
bytes += generator.barcode(Barcode.upcA(barData));
bytes += generator.feed(2);
bytes += generator.cut();
return bytes;
}
Future<List<int>> getReceiptImg(String paperSize) async {
final profile = await CapabilityProfile.load();
final generator = Generator(
paperSize == PrinterConst.paperSize58mm ? PaperSize.mm58 : PaperSize.mm80,
profile,
);
List<int> bytes = [];
final ByteData data =
await rootBundle.load('assets/images/aman_kassa_check.png');
final Uint8List imgBytes = data.buffer.asUint8List();
final Image? image = decodeImage(imgBytes);
// Using `ESC *`
bytes += generator.image(image!);
bytes += generator.feed(2);
bytes += generator.cut();
return bytes;
}
BluetoothDevice printerDeviceToBluetoothDevice(PrinterDevice device) {
return BluetoothDevice()
..name = device.name
..address = device.address
..connected = device.connected
..type = device.type;
}
PrinterDevice bluetoothDeviceToPrinterDevice(PrinterBluetooth device) {
return PrinterDevice()
..name = device.name
..address = device.address
..type = device.type;
}