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)
    ..free(docNamePtr)
    ..free(hPrinter)
    ..free(docInfo);
}