关于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;
}
}
C# code
?
/// <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;
}
}
相关文章推荐
- SQL语句里连接其它服务器上的数据库(通过TCP/IP),并操作和读取?
- 关于利用CMWAP的方式不能通过TCP/IP连接INTERNET的说明!
- SQL语句里连接其它服务器上的数据库(通过TCP/IP),并操作和读取
- BarTender 通过ZPL命令操作打印机打印条码, 操作RFID标签
- 关于sqlserver 2008r2 中出现 通过端口1433连接到主机 的localhost 的TCP/IP 解决办法
- 关于"通过端口 1433 连接到主机 127.0.0.1 的 TCP/IP 连接失败"的错误解决
- 通过TCPIP网络传输数据经过的三层buffer
- HP网络打印机的固定IP及冷复位操作
- 关于POS操作的一些文章收集链接
- 关于TCP/IP数据包的截取和分析
- Redhat中通过命令工具和配置文件设置TCP/IP参数的方法
- 关于tcp/ip &编译原理
- 尝试通过使用 TCP/IP 套接字连接到群集中的 SQL Server 命名实例时收到“SQL Server does not exist or access denied”(SQL Server 不存在,或者访问被拒绝)错误消息
- 关于打印机延迟打印任务的解决办法
- 隐藏很讨厌的“取消”打印对话框,并通过异步回调,取得异步操作的返回结果
- 用POS小票打印机,用GDI+做打印好还是用水晶报表好
- 服务器和客户机通过TCP/IP三次握手建立一个连接
- [转载]通过TCP/IP堆栈特征探测远程操作系统
- 关于对IP的一些操作
- WINDOWS 2003,XP ODBC通过TCP/IP连不上SQL 2000