Rak*_*esh 5 c# xamarin.android xamarin xamarin.forms bluetooth-printing
我正在尝试使用 Xamarin 原生 android 从蓝牙打印机 (INTERMEC PB51) 打印。
我已经根据以下链接编写了代码。
我的代码如下。
private static byte[] SELECT_BIT_IMAGE_MODE = { 0x1B, 0x2A, 33, (byte)255, 0 };
Run Code Online (Sandbox Code Playgroud)
制作位图如下。
Bitmap sigImage = BitmapFactory.DecodeResource(Resources, Resource.Drawable.icn_logo_jpg);
Run Code Online (Sandbox Code Playgroud)
创建蓝牙插座。
BluetoothSocket socket = null;
BufferedReader inReader = null;
BufferedWriter outReader = null;
string bt_printer = address; //AdminSettings.PrinterMACAddr;
if (string.IsNullOrEmpty(bt_printer)) bt_printer = "00:13:7B:49:D1:8C";
BluetoothDevice mmDevice = BluetoothAdapter.DefaultAdapter.GetRemoteDevice(bt_printer);
UUID applicationUUID = UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
socket = mmDevice.CreateRfcommSocketToServiceRecord(applicationUUID);
socket.Connect();
Run Code Online (Sandbox Code Playgroud)
调用方式
PrintImage(bitMap, socket);
Run Code Online (Sandbox Code Playgroud)
创建打印方法
public void PrintImage(Bitmap bitmap, BluetoothSocket _socket)
{
try
{
if (!_socket.IsConnected)
{
_socket.Connect();
}
MemoryStream stream = new MemoryStream();
//IMAGE
byte[] imageData = ImageToByte2(bitmap);
stream.Write(imageData, 0, imageData.Length);
stream.Write(SELECT_BIT_IMAGE_MODE, 0, SELECT_BIT_IMAGE_MODE.Length);
var bytes = stream.ToArray();
_socket.OutputStream.Write(bytes, 0, bytes.Length);
// Java.Lang.Thread.Sleep(2000);
//END IMAGE
Java.Lang.Thread.Sleep(2000);
}
catch (Exception ex)
{
throw new Exception("Unable to print. Please re-configure the printer and try again!");
}
}
public static byte[] ImageToByte2(Bitmap bitmap)
{
MemoryStream stream = new MemoryStream();
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
byte[] bitmapData = stream.ToArray();
return bitmapData;
}
Run Code Online (Sandbox Code Playgroud)
但是得到如下图打印的标志。
Intermec PB51 可以设置多种不同的打印机语言;IPL、指纹、直接协议、ZSim、DSim、CSim 和 ESC/P。因此,首先您必须知道您正在处理哪种打印机语言。{ 0x1B, 0x2A, 33, (byte)255, 0 } 是 ESC/P 中的命令,因此打印机必须处于 ESC/P 模式。
看起来您正在将 PNG 图像数据发送到打印机。我只在 ESC/P 模式下使用了 Intermec PB51,并且在 ESC/P 中,图像必须转换为 1 位图像字节数组(每个打印机“像素”一位)。
归档时间: |
|
查看次数: |
2710 次 |
最近记录: |