您的位置:首页 > 理论基础 > 计算机网络

关于pos打印机通过tcp/ip操作打印指令集

2017-04-19 12:59 381 查看
电脑通(过串口服务器的ip地址)将打印命令-->串口服务器-->串口服务器通过串口将电脑发送的ESC/POS指令传给终端pos打印机,执行打印命令。已经实现了直接通过端口发送指令,现在的问题是怎样通过网络发送指令给串口服务器,求各位大牛帮忙!代码如下:

C# code

?
/// 向打印机发送byte类型的数据

/// <param name="bdata">要打印的数据</param>

/// <returns>打印是否成功</returns>

public bool Write(byte[] bdata)

{

try

{

//判断打印机所在端口是否打开

if (IsOpen())

{

serialPort.Write(bdata, 0, bdata.Length);

return true;

}

else

{

return false;

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

}

/// 向打印机发送字符串类型的数据

/// <param name="Data">要打印的数据</param>

/// <returns>打印是否成功</returns>

public bool Write(string Data)

{

try

{

if (IsOpen())

{

byte[] bData = Encoding.Default.GetBytes(Data);

Write(bData);

return true;

}

else

{

return false;

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

}

/// 发送数据到打印机,打印完成后,自动跳到下一行

/// <param name="Data">要打印的数据</param>

/// <returns>是否打印成功</returns>

public bool WriteLine(string Data)

{

bool result = Write(Data);

if (result)

{

//打印头移动到下一行

result = NewRow();

}

return result;

}

/// 发送数据到打印机,打印完成后,自动跳到下一行,并可指定打印位置

/// <param name="Data">要打印的数据</param>

///<returns>是否打印成功</returns>

public bool WriteLine(string Data,HorPos horPos)

{

//int length = Encoding.Default.GetBytes(Data).Length;

//if (length > ColWidth || HorPos.Left==horPos)

//{

// return WriteLine(Data);

//}

byte[] temp;

switch (horPos)

{

case HorPos.Center:

{

temp = new byte[] { 0x1B, 0x61, 0x31};

serialPort.Write(temp, 0, temp.Length);

//Data = Data.PadLeft(length + (ColWidth - length) / 2 - (length - Data.Length), '*');

break;

}

case HorPos.Right:

{

//Data = Data.PadLeft(ColWidth - (length - Data.Length), '*');

temp = new byte[] { 0x1B, 0x61, 0x32 };

serialPort.Write(temp, 0, temp.Length);

break;

}

case HorPos.Left:

{

//1B 61 n选择字体默认居左显示(n对应ascll码'0')

temp = new byte[] { 0x1B, 0x61, 0x30 };

serialPort.Write(temp, 0, temp.Length);

break;

}

default:

{

break;

}

}

return WriteLine(Data);

}

/// 打印一行分割线====

/// <returns>是否打印成功</returns>

public bool PrintLine()

{

byte[] temp = new byte[] { 0x1B, 0x61, 0x30 };

serialPort.Write(temp, 0, temp.Length);

return WriteLine("--------------------------------");

}

/*

* 打印日期 格式:2011-06-21 00:00:00

* <returns>是否打印成功</returns>

*/

public bool PrintDate()

{

return WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

}

/*

* 打印头移动到下一行

* <returns>是否移动成功</returns>

*/

public bool NewRow()

{

byte[] temp = new byte[] { 0x0A };

return Write(temp);

}

/*

* 打印头移动多行

* <param name="iRow">要移动的行数</param>

* <returns>是否移动成功</returns>

*/

public bool NewRow(int iRow)

{

bool result = false;

for (int i = 0; i < iRow; i++)

{

result = NewRow();

if (!result)

{

break;

}

}

return result;

}

/*

* 设置打印机初始化状态

*/

public bool SetNormalFont()

{

if (!IsOpen())

{

return false;

}

byte[] temp;

try

{

//1D, 50 设置横向和纵向移动单位

temp = new byte[] { 0x1D, 0x50/*, 0xB4, 0xB4*/ };

serialPort.Write(temp, 0, temp.Length);

//1B, 53 选择标准模式

temp = new byte[] { 0x1B, 0x53 };

serialPort.Write(temp, 0, temp.Length);

//1B, 20 设置字符右间距

temp = new byte[] { 0x1B, 0x20, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//设置汉字字符左右间距

temp = new byte[] { 0x1C, 0x53, 0x00, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1D 42 是否反选打印 01反选/00取消

temp = new byte[] { 0x1D, 0x42, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 45 选择/取消加粗模式 01选择/00取消

temp = new byte[] { 0x1B, 0x45, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 7B 选择/取消倒置打印模式 01选择/00取消

temp = new byte[] { 0x1B, 0x7B, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 2D 设置/取消下划线 01设置/00取消

temp = new byte[] { 0x1B, 0x2D, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 2D 设置/取消汉字下划线 01设置/00取消

temp = new byte[] { 0x1C, 0x2D, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//选择取消顺时针旋转90度 01选择 00取消

temp = new byte[] { 0x1B, 0x56, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 45 选择/取消加粗模式 01选择/00取消

temp = new byte[] { 0x1B, 0x45, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B 45 设置绝对打印位置

temp = new byte[] { 0x1B, 0x24, 0x00, 0x00 };

serialPort.Write(temp, 0, temp.Length);

//1B, 33 设置行高, 18个像素

temp = new byte[] { 0x1B, 0x33, 0x20 };

serialPort.Write(temp, 0, temp.Length);

//1B 4D 选择字体 03为汉字字体

temp = new byte[] { 0x1B, 0x4D, 0x03 };

serialPort.Write(temp, 0, temp.Length);

//1D 21 选择字体大小,默认

temp = new byte[] { 0x1B, 0x21, 0x00 };

serialPort.Write(temp, 0, temp.Length);

return true;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

}

/*

* 以大一倍的字体打印数据

* <param name="Data">需要打印的数据</param>

* <returns>是否打印成功</returns>

*/

public bool WriteBig(string Data)

{

bool result = false;

result = SetNormalFont();

if (!result)

{

return result;

}

try

{

byte[] temp;

//1B, 33 设置行高, 54个像素

temp = new byte[] { 0x1B, 0x33, 0x48 };

serialPort.Write(temp, 0, temp.Length);

//1B 4D 选择字体 03为汉字字体

temp = new byte[] { 0x1B, 0x4D, 0x03 };

serialPort.Write(temp, 0, temp.Length);

//横向放大和纵向放大不可同时作用

//1D 21 选择字体大小,横向放大1倍

temp = new byte[] { 0x1B, 0x21, 0x10 };

serialPort.Write(temp, 0, temp.Length);

//1D 21 选择字体大小,纵向放大1倍

//temp = new byte[] { 0x1D, 0x21, 0x01 };

//serialPort.Write(temp, 0, temp.Length);

//1B 45 选择/取消加粗模式 01选择/00取消?

temp = new byte[] { 0x1B, 0x45, 0x01 };

serialPort.Write(temp, 0, temp.Length);

Write(Data);

result = true;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

result = SetNormalFont();

if (result)

{

result = NewRow();

}

return result;

}

/*

* 以大一倍的字体打印数据,打印完成换行

* <param name="Data">需要打印的数据</param>

* <returns>是否打印成功</returns>

*/

public bool WriteBigLine(string Data)

{

bool result = false;

result = SetNormalFont();

if (!result)

{

return result;

}

try

{

byte[] temp;

//1B, 33 设置行高, 54个像素

temp = new byte[] { 0x1B, 0x33, 0x48 };

serialPort.Write(temp, 0, temp.Length);

//1B 4D 选择字体 03为汉字字体

temp = new byte[] { 0x1B, 0x4D, 0x03 };

serialPort.Write(temp, 0, temp.Length);

//横向放大和纵向放大不可同时作用

//1D 21 选择字体大小,横向放大1倍

temp = new byte[] { 0x1D, 0x21, 0x01 };

serialPort.Write(temp, 0, temp.Length);

//1D 21 选择字体大小,纵向放大1倍

temp = new byte[] { 0x1B, 0x21, 0x01 };

serialPort.Write(temp, 0, temp.Length);

//1B 45 选择/取消加粗模式 01选择/00取消

temp = new byte[] { 0x1B, 0x45, 0x01 };

serialPort.Write(temp, 0, temp.Length);

Write(Data);

result = true;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

result = SetNormalFont();

if (result)

{

result = NewRow();

}

return result;

}

/*

* 设置带下划线的行

* <returns>是否设置成功</returns>

*/

public bool SetUnderLine()

{

bool result = false;

try

{

byte[] temp;

//1B 2D 设置/取消下划线 01设置/00取消

temp = new byte[] { 0x1B, 0x2D, 0x02 };

serialPort.Write(temp, 0, temp.Length);

//1B 2D 设置/取消汉字下划线 01设置/00取消

temp = new byte[] { 0x1C, 0x2D, 0x02 };

serialPort.Write(temp, 0, temp.Length);

Write(" ");

result = true;

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

return false;

}

result = SetNormalFont();

return result;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: