C# 热敏打印机 小票打印机 打印图片
2012-12-26 19:41
411 查看
这两天一直在研究热敏小票打印机打印图片的问题,在经过痛苦的找资料过程后,终于实验成功了。经过一番测试和修改,代码终于出炉了,这次打印条形码、二维码、Logo就方便多了。
这份代码是通过Socket连接到网络打印机进行打印的,本地的暂时没有测试,所以没有发。PrintLine方法是打印字符的,而PrintPic方法,则是打印图片的。初始化的时候,要给定网络打印机的ip。
经过测试,二维码的图片最好用200x200的,条形码则可以用300x200的。
(如果代码中提示Bitmap 不能识别,则要添加System.Windows.Forms和System.Drawing的引用。)
调用方法:
并口打印的例子可以参见小蒋的博文《C#并口热敏小票打印机打印位图》。
网口热敏打印机机和并口热敏打印机打印图片的实例均可以在
这里 下载。
这个代码在爱普生EPSON的代码上更改的,在思普瑞特(SPRT)SP-POS58III的热敏小票打印机上实验成功,吉成GS-58系列上没有实验成功。唯拓VT-58G、佳博GP-80XXX等,由于暂时没有这些打印机,所以没及时测试。吉成GS-58系列上的问题暂时不知道什么问题。所以如果你是吉成的小票机,或许你可以参考参考代码,但不保证可用。 |
经过测试,二维码的图片最好用200x200的,条形码则可以用300x200的。
using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace POSPrinter { /// <summary> /// POSPrinter的摘要说明。 /// 此类处理网络打印,使用了IP端口. /// </summary> public class NetPOSPrinter { string ipPort = "127.0.0.1"; public NetPOSPrinter() { } public NetPOSPrinter(string IpPort) { this.ipPort = IpPort;//打印机端口 } /// <summary> /// 输出文字到打印机 /// </summary> /// <param name= "str "> 要打印的内容 </param> public void PrintLine(string str) { //建立连接 IPAddress ipa = IPAddress.Parse(ipPort); IPEndPoint ipe = new IPEndPoint(ipa, 9100);//9100为小票打印机指定端口 Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); soc.Connect(ipe); //string str= "hello,123456789,大家好! "; byte[] b = System.Text.Encoding.GetEncoding("GB2312").GetBytes(str); soc.Send(b); soc.Close(); } public void PrintPic(Bitmap bmp) { //把ip和端口转化为IPEndPoint实例 IPEndPoint ip_endpoint = new IPEndPoint(IPAddress.Parse(ipPort), 9100); //创建一个Socket Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //连接到服务器 socket.Connect(ip_endpoint); //应对同步Connect超时过长的办法,猜测应该是先用异步方式建立以个连接然后, //确认连接是否可用,然后报错或者关闭后,重新建立一个同步连接 //socket.SendTimeout = 1000; //初始化打印机,并打印 Byte[] byte_send = Encoding.GetEncoding("gb18030").GetBytes("\x1b\x40"); //发送测试信息 socket.Send(byte_send, byte_send.Length, 0); byte[] data = new byte[] { 0x1B, 0x33, 0x00 }; socket.Send(data, data.Length, 0); data[0] = (byte)'\x00'; data[1] = (byte)'\x00'; data[2] = (byte)'\x00'; // Clear to Zero. Color pixelColor; // ESC * m nL nH 点阵图 byte[] escBmp = new byte[] { 0x1B, 0x2A, 0x00, 0x00, 0x00 }; escBmp[2] = (byte)'\x21'; //nL, nH escBmp[3] = (byte)(bmp.Width % 256); escBmp[4] = (byte)(bmp.Width / 256); // data for (int i = 0; i < (bmp.Height / 24) + 1; i++) { socket.Send(escBmp, escBmp.Length, 0); for (int j = 0; j < bmp.Width; j++) { for (int k = 0; k < 24; k++) { if (((i * 24) + k) < bmp.Height) // if within the BMP size { pixelColor = bmp.GetPixel(j, (i * 24) + k); if (pixelColor.R == 0) { data[k / 8] += (byte)(128 >> (k % 8)); } } } socket.Send(data, 3, 0); data[0] = (byte)'\x00'; data[1] = (byte)'\x00'; data[2] = (byte)'\x00'; // Clear to Zero. } byte_send = Encoding.GetEncoding("gb18030").GetBytes("\n"); //发送测试信息 socket.Send(byte_send, byte_send.Length, 0); } // data byte_send = Encoding.GetEncoding("gb18030").GetBytes("\n"); //发送测试信息 socket.Send(byte_send, byte_send.Length, 0); socket.Close(); } /// <summary> /// 打开钱箱 /// </summary> public void OpenCashBox() { IPAddress ipa = IPAddress.Parse(ipPort); IPEndPoint ipe = new IPEndPoint(ipa, 9100);//9100为小票打印机指定端口 Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); soc.Connect(ipe); char[] c = { Convert.ToChar(27), 'p', Convert.ToChar(0), Convert.ToChar(60), Convert.ToChar(255) }; byte[] b = System.Text.Encoding.GetEncoding("GB2312").GetBytes(c); soc.Send(b); soc.Close(); } } }
(如果代码中提示Bitmap 不能识别,则要添加System.Windows.Forms和System.Drawing的引用。)
调用方法:
NetPOSPrinter posPrinter = new NetPOSPrinter(txtIP.Text); posPrinter.PrintPic(new Bitmap(pictureBox1.Image));
并口打印的例子可以参见小蒋的博文《C#并口热敏小票打印机打印位图》。
网口热敏打印机机和并口热敏打印机打印图片的实例均可以在
这里 下载。
相关文章推荐
- C# 热敏打印机 小票打印机 打印图片
- C# 热敏打印机 小票打印机 打印图片
- C#并口热敏小票打印机打印位图包括芯片的写入
- C#使用ESC指令控制POS打印机打印小票
- C# Lpt 并口热敏小票打印机打印位图
- C# 小票打印机 直接打印 无需驱动
- C# 热敏打印机 Socket 网络链接 打印 图片
- C#调用打印机打印图片
- C# 网络打印机ESC指令打印小票
- C#调用打印机,打印图片
- C# 小票打印机 直接打印 无需驱动[转]
- 网上找的,C# 小票打印机 直接打印,备用
- C#并口热敏小票打印机打印位图
- 【转】C#使用ESC指令控制POS打印机打印小票
- C# 调用打印机打印图片
- C#调用打印机,打印图片
- 转:C#并口热敏小票打印机打印位图
- C#生成条码图片,并用条码打印机打印
- C#并口热敏小票打印机打印位图
- C# 收银机顾显(客显)及打印小票(58热敏打印机)