printEscPosWin32 method

void printEscPosWin32(
  1. List<int> data
)

Implementation

void printEscPosWin32(List<int> data) {
  final hPrinter = calloc<HANDLE>();
  final docInfo = calloc<DOC_INFO_1>();

  final printerNamePtr = printerName.toNativeUtf16();
  final docNamePtr = 'ESC/POS Print Job'.toNativeUtf16();

  docInfo.ref.pDocName = docNamePtr;
  docInfo.ref.pOutputFile = nullptr;
  docInfo.ref.pDatatype = nullptr;

  if (OpenPrinter(printerNamePtr, hPrinter, nullptr) != 0) {
    final printerHandle = hPrinter.value;

    if (StartDocPrinter(printerHandle, 1, docInfo.cast()) != 0) {
      StartPagePrinter(printerHandle);

      final buffer = Uint8List.fromList(data);
      final bytesWritten = calloc<DWORD>();

      WritePrinter(printerHandle, buffer.allocatePointer(), buffer.length, bytesWritten);

      EndPagePrinter(printerHandle);
      EndDocPrinter(printerHandle);
    }

    ClosePrinter(printerHandle);
  }

  calloc.free(printerNamePtr);
  calloc.free(docNamePtr);
  calloc.free(hPrinter);
  calloc.free(docInfo);
}