public class PrintInvoice {
#region 01.获得打印机1获得吧台打印机2获得后厨打印机
/// <summary>
/// 获得打印机1获得吧台打印机2获得后厨打印机
/// </summary>
public TcpClient GetPrint(int n = 1)
{
var client = new System.Net.Sockets.TcpClient();
var bll = new PrintAndPlaceBll();
var model = bll.GetModel(n);
var port = Common.rtnInt32(model.PrintPort);//9100
var ipPrint = model.PrintIpAddress;//192.168.1.111
client.Connect(ipPrint, port);
return client;
}
#endregion
#region 02.初始化一个网路访问数据流
/// <summary>
/// 初始化一个网路访问数据流
/// </summary>
/// <returns></returns>
public NetworkStream BuildStream() {
System.Net.Sockets.NetworkStream stream = null;
return stream;
}
#endregion
#region 03.套接字和打印机通讯放回通讯流
/// <summary>
/// 套接字和打印机通讯放回通讯流
/// </summary>
/// <returns></returns>
public NetworkStream GetStream(TcpClient client, NetworkStream stream)
{
byte[] chushihua = new byte[] { 27, 64 };//初始化打印机
byte[] ziti = new byte[] { 27, 77, 0 };//选择字体n =0,1,48,49
byte[] zitidaxiao = new byte[] { 29, 33, 0 };//选择字体大小
byte[] duiqifangshi = new byte[] { 27, 97, 1 };//选择对齐方式0,48左对齐1,49中间对齐2,50右对齐
stream = client.GetStream(); //是否支持写入
if (!stream.CanWrite) { stream = null; }
stream.Write(chushihua, 0, chushihua.Length);//初始化
stream.Write(ziti, 0, ziti.Length);//设置字体
stream.Write(zitidaxiao, 0, zitidaxiao.Length);//设置字体大小--关键
stream.Write(duiqifangshi, 0, duiqifangshi.Length);//居中
return stream;
}
#endregion
#region 04.把要打印的文字写入打印流
/// <summary>
/// 把要打印的文字写入打印流
/// </summary>
/// <param name="stream"></param>
/// <param name="output"></param>
public void PrintText(NetworkStream stream, string output)
{
Byte[] data = System.Text.Encoding.Default.GetBytes(output);
stream.Write(data, 0, data.Length);//输出文字
}
#endregion
#region 05.设置对齐方式0,48左对齐1,49中间对齐2,50右对齐
/// <summary>
/// 设置对齐方式0,48左对齐1,49中间对齐2,50右对齐
/// </summary>
/// <param name="stream"></param>
/// <param name="n"></param>
public void SetDuiQi(NetworkStream stream, byte n)
{
byte[] duiqifangshi = new byte[] { 27, 97, 1 };//选择对齐方式0,48左对齐1,49中间对齐2,50右对齐
stream.Write(duiqifangshi, 0, duiqifangshi.Length);
}
#endregion
#region 06.设置字体n =0,1,48,49
/// <summary>
/// 设置字体n =0,1,48,49
/// </summary>
/// <param name="stream"></param>
/// <param name="n"></param>
public void SetFont(NetworkStream stream, byte n)
{
byte[] ziti = new byte[] { 27, 77, 0 };//选择字体n =0,1,48,49
stream.Write(ziti, 0, ziti.Length);
}
#endregion
#region 07.设置加粗1加粗0还原
/// <summary>
/// 设置加粗1加粗0还原
/// </summary>
/// <param name="stream"></param>
/// <param name="n"></param>
public void SetBold(NetworkStream stream, byte n)
{
byte[] jiacu = new byte[] { 27, 69, n };//选择加粗模式
stream.Write(jiacu, 0, jiacu.Length);
}
#endregion
#region 08.设置字体大小0最小1,2,3
/// <summary>
/// 设置字体大小0最小1,2,3
/// </summary>
/// <param name="stream"></param>
/// <param name="n"></param>
public void SetFontSize(NetworkStream stream, byte n)
{
byte[] zitidaxiao = new byte[] { 29, 33, n };//选择字体大小
stream.Write(zitidaxiao, 0, zitidaxiao.Length);
}
#endregion
#region 09.切纸
/// <summary>
/// 切纸
/// </summary>
/// <param name="stream"></param>
/// <param name="n"></param>
public void QieZhi(NetworkStream stream)
{
byte[] qiezhi = new byte[] { 29, 86, 1, 49 };//切纸
stream.Write(qiezhi, 0, qiezhi.Length);
}
#endregion
#region 10.释放资源
/// <summary>
/// 释放资源
/// </summary>
/// <param name="client"></param>
/// <param name="stream"></param>
public void DiposeStreamClient(TcpClient client, NetworkStream stream)
{
if (stream != null)
{
stream.Close();
stream.Dispose();
}
if (client != null) client.Close();
}
#endregion
#region 11.样例展示
private void Printeg()
{
var p = new PrintInvoice();
var batai = p.GetPrint();//获得吧台打印机
var liunull = p.BuildStream();//初始化一个网络访问数据流
try
{
var liu = p.GetStream(batai, liunull);//获得通讯打印流
p.SetFontSize(liu, 2);//字体变大
p.SetBold(liu, 1);//加粗
p.PrintText(liu, " 结账单 ");//打印文字
p.SetBold(liu, 0);//取消加粗
p.SetFontSize(liu, 0);//字体还原
p.PrintText(liu, "北京西城 ");//打印文字
p.PrintText(liu, " ---------------------------------------------- ");//打印文字
p.PrintText(liu, "账单号:1405220015 消费方式:普通消费 ");//打印文字
p.PrintText(liu, "时间:14-06-06 08:58 人数:4 桌号:11");//打印文字
p.PrintText(liu, " ---------------------------------------------- ");//打印文字
p.SetFontSize(liu, 1);//字体变大
p.SetBold(liu, 1);//加粗
p.PrintText(liu, "品项名称 数量 单价 金额");//打印文字
p.SetBold(liu, 0);//取消加粗 p.SetFontSize(liu, 0);//字体还原
p.PrintText(liu, " ---------------------------------------------- ");//打印文字
p.PrintText(liu, "木须肉 2 16 32 ");//打印文字
p.PrintText(liu, "宫保鸡丁 1 20 20 ");//打印文字
p.PrintText(liu, "---------------------------------------------- ");//打印文字
p.SetFontSize(liu, 1);//字体变大 p.SetBold(liu, 1);//加粗
p.PrintText(liu, " 小计:52.00");//打印文字
p.SetBold(liu, 0);//取消加粗
p.SetFontSize(liu, 0);//字体还原
p.PrintText(liu, " ---------------------------------------------- ");//打印文字
p.PrintText(liu, " 折扣:4 现金:100 找零:44 ");//打印文字
p.SetFontSize(liu, 1);//字体变大 p.SetBold(liu, 1);//加粗
p.PrintText(liu, " 实际结算:¥48");//打印文字
p.SetBold(liu, 0);//取消加粗 p.SetFontSize(liu, 0);//字体还原
p.PrintText(liu, " ---------------------------------------------- ");//打印文字
p.PrintText(liu, "收银员:张三 ");//打印文字
p.PrintText(liu, "服务员:李四 ");//打印文字
p.PrintText(liu, " 客人签字:________________ ");//打印文字
p.PrintText(liu, " ============================================== ");//打印文字
p.PrintText(liu, "xx餐厅祝您用餐愉快!");//打印文字 p.PrintText(liu, " 餐厅电话:4000000 ");//打印文字
p.PrintText(liu, " ============================================== ");//打印文字
p.PrintText(liu, " ");//打印文字
p.QieZhi(liu);//切纸
} catch
{
//打印机缺纸或者纸匣打开时,不会出现异常,不用特殊代码判断,数据不会丢失.
}
finally {
p.DiposeStreamClient(batai, liunull);//释放资源
}
}
#endregion
}