C# 热敏打印机 小票打印机 打印图片

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();
        }

    }
}
时间: 2024-11-05 15:59:44

C# 热敏打印机 小票打印机 打印图片的相关文章

转:C#并口热敏小票打印机打印位图

最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: [html] view plaincopy class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { LptStr = l_LPT_Str; } [StructLayout(LayoutKind.Sequential)] pr

串口小票打印机打印乱码问题

-------------------------------------- editor:YeungChi date:2016/3/29 describe:小票打印机乱码问题 文章内容:一.参数解释 二.串口连接打印机设置案例 -------------------------------------- 串口是一种非常通用的设备通信的协议: 一.参数解释 波特率 这是一个衡量符号传输速率的参数.它表示每秒钟传送的符号的个数.例如300波特表示每秒钟发送300个符号.当我们提到时钟周期时,我们就

.net 调用小票打印机 打印票据

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(); v

常见小票打印机打印故障及解决方法汇总视频教程

通过对"常见小票打印机故障及解决方法汇总视频教程"课程学习,达到以下目的:1.可以独立自主安装打印机驱动以及安装打印机硬件设备 2.可以独立自主排除常见打印机故障学习教程 常见小票打印机故障:[小票打印机不打印故障]1.电脑系统参数设置不正确导致小票打印机不打印故障2.端口不正确导致不打印故障3.属性参数不正确导致不打印故障4.红灯一直闪烁不打印故障5.打印机图标突然消失不打印故障6.默认打印机不正确不打印故障 [虽然打印,但是打印不正常]1.虽然打印,但是打印的字挤压在一起,显示不正

C#并口热敏小票打印机打印位图包括芯片的写入

下面是打印所需要调用的代码: class LptControl { private string LptStr = "lpt1"; public LptControl(string l_LPT_Str) { LptStr = l_LPT_Str; } [StructLayout(LayoutKind.Sequential)] private struct OVERLAPPED { int Internal; int InternalHigh; int Offset; int OffSe

365小票打印机打印接口开发文档

API开发文档 接口1:打印内容 参数 说明 deviceNo 打印机编号 key 密钥 printContent 打印内容 times 固定传1 调用方式:HTTP POSTURL:http://open.printcenter.cn:8080/addOrder返回结果:JSON字符串 ----------S1小票机返回的结果有如下几种:---------- {"responseCode":0,"msg":"订单添加成功,打印完成","

某小票打印机打印接口开发文档

API开发文档 接口1:打印内容 参数 说明 deviceNo 打印机编号 key 密钥 printContent 打印内容 times 固定传1 调用方式:HTTP POSTURL:http://open.printcenter.cn:8080/addOrder返回结果:JSON字符串 ----------S1小票机返回的结果有如下几种:---------- {"responseCode":0,"msg":"订单添加成功,打印完成","

Java 调用打印机打印图片

import java.io.FileInputStream; import java.io.IOException; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintException; import javax.print.PrintService; import javax.print.PrintServiceLooku

小票打印机乱码问题

-------------------------------------- editor:YeungChi date:2016/3/29 describe:小票打印机乱码问题 文章内容:一.参数解释 二.串口连接打印机设置案例 -------------------------------------- 串口是一种非常通用的设备通信的协议: 一.参数解释 波特率 这是一个衡量符号传输速率的参数.它表示每秒钟传送的符号的个数.例如300波特表示每秒钟发送300个符号.当我们提到时钟周期时,我们就