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, "\n結賬單\n\n");//打印文字
p.SetBold(liu, 0);//取消加粗
p.SetFontSize(liu, 0);//字體還原
p.PrintText(liu, "北京西城 ");//打印文字
p.PrintText(liu, "\n----------------------------------------------\n");//打印文字
p.PrintText(liu, "賬單號:1405220015 消費方式:普通消費\n");//打印文字
p.PrintText(liu, "時間:14-06-06 08:58 人數:4 桌號:11");//打印文字
p.PrintText(liu, "\n----------------------------------------------\n");//打印文字
p.SetFontSize(liu, 1);//字體變大
p.SetBold(liu, 1);//加粗
p.PrintText(liu, "品項名稱 數量 單價 金額");//打印文字
p.SetBold(liu, 0);//取消加粗 p.SetFontSize(liu, 0);//字體還原
p.PrintText(liu, "\n----------------------------------------------\n");//打印文字
p.PrintText(liu, "木須肉 2 16 32\n");//打印文字
p.PrintText(liu, "宮保雞丁 1 20 20\n");//打印文字
p.PrintText(liu, "----------------------------------------------\n");//打印文字
p.SetFontSize(liu, 1);//字體變大 p.SetBold(liu, 1);//加粗
p.PrintText(liu, " 小計:52.00");//打印文字
p.SetBold(liu, 0);//取消加粗
p.SetFontSize(liu, 0);//字體還原
p.PrintText(liu, "\n----------------------------------------------\n");//打印文字
p.PrintText(liu, "\n折扣:4 現金:100 找零:44\n\n");//打印文字
p.SetFontSize(liu, 1);//字體變大 p.SetBold(liu, 1);//加粗
p.PrintText(liu, " 實際結算:¥48");//打印文字
p.SetBold(liu, 0);//取消加粗 p.SetFontSize(liu, 0);//字體還原
p.PrintText(liu, "\n----------------------------------------------\n");//打印文字
p.PrintText(liu, "收銀員:張三 \n");//打印文字
p.PrintText(liu, "服務員:李四 \n");//打印文字
p.PrintText(liu, "\n客人簽字:________________ \n");//打印文字
p.PrintText(liu, "\n==============================================\n");//打印文字
p.PrintText(liu, "xx餐廳祝您用餐愉快!");//打印文字 p.PrintText(liu, "\n餐廳電話:4000000 ");//打印文字
p.PrintText(liu, "\n==============================================\n");//打印文字
p.PrintText(liu, "\n\n\n\n\n\n\n\n");//打印文字
p.QieZhi(liu);//切紙
} catch
{
//打印機缺紙或者紙匣打開時,不會出現異常,不用特殊代碼判斷,數據不會丟失.
}
finally {
p.DiposeStreamClient(batai, liunull);//釋放資源
}
}
#endregion
}
