电脑通(过串口服务器的ip地址)将打印命令-->串口服务器-->串口服务器通过串口将电脑发送的ESC/POS指令传给终端pos打印机,执行打印命令。已经实现了直接通过端口发送指令,现在的问题是怎样通过网络发送指令给串口服务器,求各位大牛帮忙!代码如下:
/// 向打印机发送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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.IO.Ports;
namespace
Print
{
/// <summary>
/// 串口打印类
/// </summary>
public
class
CommControl
{
public
CommControl()
{ }
///打印位置
/// Left 居左打印
/// Center 居中打印
/// Right 居右打印
public
enum
HorPos
{
Left, Center, Right
}
//
//private int ColWidth = 32;
//定义串行端口资源
private
SerialPort serialPort;
///构造函数
/// <param name="PortName">打印机所在的串口</param>
public
CommControl(
string
PortName)
{
try
{
Console.WriteLine(
"开始设置打印机初始化状态"
);
serialPort =
new
SerialPort();
serialPort.PortName = PortName;
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.Open();
//设置打印机初始化状态
SetNormalFont();
Console.WriteLine(
"打印机初始化设置成功!"
);
}
catch
(Exception ex)
{
Console.WriteLine(ex.Message);
}
}
///
/// 析构函数,不调用此函数,不能释放串口
/// <returns>是否释放成功</returns>
public
bool
Dispose()
{
Console.WriteLine(
"开始判断串口状态!"
);
bool
result =
true
;
if
(serialPort !=
null
)
{
if
(serialPort.IsOpen)
{
try
{
Console.WriteLine(
""
);
serialPort.Close();
serialPort.Dispose();
}
catch
(Exception ex)
{
Console.WriteLine(ex.Message);
return
false
;
}
}
}
return
result;
}
/// 打印机所在串口是否打开
/// <returns>true 串口打开成功;false串口打开失败</returns>
public
bool
IsOpen()
{
bool
result =
false
;
if
(serialPort !=
null
&& serialPort.IsOpen)
{
result =
true
;
}
return
result;
}
}
|
/// 向打印机发送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;
}
}