SBPL 类库,打印机

 public class Printer_SBPL_SDK
    {
        /// <summary>
        /// 命令头 ESC  →16进制1B
        /// </summary>
        char ESC = '\x1b';
        public StringBuilder PrintCommand = new StringBuilder();
        string EroMsg = "";
        /// <summary>
        /// 脚本开始编写
        /// </summary>
        /// <returns></returns>
        public bool AddStart()
        {
            PrintCommand.Append(ESC + "A" + "\r");
            return true;
        }
        /// <summary>
        /// 设置打印速度
        /// </summary>
        /// <param name="speed">打印速度</param>
        /// <returns></returns>
        public bool AddPrintSpeed(int speed)
        {

            PrintCommand.Append(ESC + "Z" + "\r");
            return true;
        }

        /// <summary>
        /// 切纸  批量打印时如果4个标签一组就输入4 尾数自动切:: 7个就会出现一组4个一组3个
        /// </summary>
        /// <returns></returns>
        public bool AddCut( int qty)
        {
            PrintCommand.Append(ESC + "~A" + qty.ToString()+ "\r");
            return true;
        }
        /// <summary>
        /// 设置打印数量
        /// </summary>
        /// <param name="qty">打印数量</param>
        /// <returns></returns>
        public bool AddPrintQty(int qty)
        {
            PrintCommand.Append(ESC + "Q" + qty.ToString() + "\r");
            return true;
        }
        /// <summary>
        /// 脚本编写结束
        /// </summary>
        /// <returns></returns>
        public bool AddEnd()
        {
            PrintCommand.Append(ESC + "Z");
            return true;
        }
        /// <summary>
        /// 添加文本
        /// </summary>
        /// <param name="raotion">旋转角度 0:不旋转 1:逆时针旋转90° 2:逆时针旋转180° 3:逆时针旋转270°</param>
        /// <param name="x">横坐标</param>
        /// <param name="y">纵坐标</param>
        /// <param name="FangDaX">横向放大</param>
        /// <param name="FangDaY">纵向放大</param>
        /// <param name="ZiJianJu">字间距</param>
        /// <param name="ZiHao">字号</param>
        /// <param name="Content">内容</param>
        /// <returns></returns>
        public bool AddText(int raotion, int x, int y, int FangDaX, int FangDaY, int ZiJianJu, int ZiHao, string Content)
        {
            //%3H0045V0030L0101P02K9DCARD NO.
            if (raotion < 0 || raotion > 4)
            {
                EroMsg = "旋转角度错误!(备注范围0~3 以左上角为基点进行旋转 )";
                return false;
            }
            if (FangDaX < 1 || FangDaX > 13)
            {
                EroMsg = "横向放大!(备注范围0~12)";
                return false;
            }
            if (FangDaY < 1 || FangDaY > 13)
            {
                EroMsg = "纵向放大!(备注范围0~12)";
                return false;
            }
            if (FangDaY < -4 || FangDaY > 255)
            {
                EroMsg = "纵向放大!(备注范围-3~255)";
                return false;
            }
            if (ZiHao < 0 || ZiHao > 10)
            {
                EroMsg = "字号错误!(备注范围1-9)";
                return false;
            }
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + x.ToString("D4") + ESC + "V" + y.ToString("D4") +
            ESC + "L" + FangDaX.ToString("D2") + FangDaY.ToString("D2") + ESC + "P" + ZiJianJu.ToString("D2") + ESC + "K" + ZiHao.ToString() + "D" + Content + "\r");
            return true;
        }
        /// <summary>
        /// 画实线
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Lenth">线长度</param>
        /// <param name="LineFit">线高度</param>
        /// <param name="isHorizon">是否为横向线</param>
        /// <returns></returns>
        public bool AddLine(int raotion, int StarX, int StarY, int Lenth, int LineFit, bool isHorizon)
        {
            //%0H0008V0164FW0202V001H422
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "FW" + LineFit.ToString("D2") + (isHorizon == true ? "H" : "V") + Lenth.ToString() + "\r");
            return true;
        }
        /// <summary>
        /// 画实线方框
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Lenth_X">横线长度</param>
        /// <param name="Lenth_Y">纵线长度</param>
        /// <param name="HorizonLineFit">横向线高度</param>
        /// <param name="VerticalLineFit">纵向线高度</param>
        /// <returns></returns>
        public bool AddGridLine(int raotion, int StarX, int StarY, int Lenth_X, int Lenth_Y, int HorizonLineFit, int VerticalLineFit)
        {
            //%0H0008V0024FW0202V612H422
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "FW" + VerticalLineFit.ToString("D2") + HorizonLineFit.ToString("D2") + "V" + Lenth_Y.ToString() + "H" + Lenth_X.ToString() + "\r");
            return true;
        }

        /// <summary>
        /// 画虚线
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Lenth">线长度</param>
        /// <param name="LineFit">线高度</param>
        /// <param name="isHorizon">是否为横向线</param>
        /// <returns></returns>
        public bool AddRuledLine(int raotion, int StarX, int StarY, int Lenth, int LineFit, bool isHorizon)
        {
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "FW" + LineFit.ToString("D2") + (isHorizon == true ? "H" : "V") + Lenth.ToString() + "PF0F0F0F0" + "\r");
            return true;
        }
        /// <summary>
        /// 画虚线方框
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Lenth_X">横向长度</param>
        /// <param name="Lenth_Y">纵向长度</param>
        /// <param name="HorizonLineFit">横向线高度</param>
        /// <param name="VerticalLineFit">纵向线高度</param>
        /// <returns></returns>
        public bool AddRuledGridLine(int raotion, int StarX, int StarY, int Lenth_X, int Lenth_Y, int HorizonLineFit, int VerticalLineFit)
        {
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "FW" + VerticalLineFit.ToString("D2") + HorizonLineFit.ToString("D2") + "V" + Lenth_Y.ToString() + "H" + Lenth_X.ToString() + "PF0F0F0F0" + "\r");
            return true;
        }
        /// <summary>
        /// /添加一维码Code128B
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Content">内容</param>
        /// <param name="Barcode_Narrow">窄条的宽度</param>
        /// <param name="Barcode_height">高度</param>
        /// <returns></returns>
        public bool AddCode128(int raotion, int StarX, int StarY, string Content, int Barcode_Narrow, int Barcode_height)
        {
            if (Barcode_Narrow < 0 || Barcode_Narrow > 13)
            {
                EroMsg = "一维码窄条宽度无效!(备注范围1~12)";
                return false;
            }
            if (Barcode_height < 0 || Barcode_height > 1000)
            {
                EroMsg = "一维码高度无效!(备注范围1~999)";
                return false;
            }
            //V100H200BG02120ABCD123456    --Code128B  大写字符+小写字符+数字
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "BG" + Barcode_Narrow.ToString("D2") + Barcode_height.ToString("D3") + Content + "\r");
            return true;
        }
        /// <summary>
        /// 添加二维码
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标</param>
        /// <param name="StarY">纵坐标</param>
        /// <param name="Content">内容</param>
        /// <param name="Pointsize">小方格大小</param>
        /// <returns></returns>
        public bool AddCode2(int raotion, int StarX, int StarY, string Content, int Pointsize)
        {
            //%0H0288V00602D30,H,06,0,0
            //2D30,H,04,0,0 二维码(每种码不一样)\ 容错级别\ 一个小方格的大小\没看明白\没看明白
            //L  7 %  M  15 % Q  25 % H  30 %
            PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "H" + StarX.ToString("D4") + ESC + "V" + StarY.ToString("D4") +
            ESC + "2D30,H," + Pointsize.ToString("D2") + ",0,0" + "\r");
            //1数字2字母+数字3汉字
            PrintCommand.Append(ESC + "DS2," + Content + "\r");
            return true;
        }

        /// <summary>
        /// 打印图片
        /// </summary>
        /// <param name="raotion">旋转角度</param>
        /// <param name="StarX">横坐标 单位mm</param>
        /// <param name="StarY">纵坐标 单位mm</param>
        /// <param name="imgurl">图片路径</param>
        /// <returns></returns>
        public bool AddImage(int raotion, int StarX, int StarY, string imgurl)
        {
            Bitmap original = (Bitmap)Image.FromFile(imgurl);
            var region = new Rectangle(0, 0, original.Width, original.Height);
            using (var bmp1bpp = original.Clone(region, PixelFormat.Format1bppIndexed))
            using (var memory = new System.IO.MemoryStream())
            {
                bmp1bpp.Save(memory, ImageFormat.Bmp);
                var bmp = memory.ToArray();
                if (!(1 <= bmp.Length && bmp.Length <= 99999))
                {
                    EroMsg = string.Format("Reduce bitmap size. current:{0}, max:99999", bmp.Length);
                    return false;
                }
                //%0H0288V0060GM00801,xxxxxx
                PrintCommand.Append(ESC + "%" + raotion.ToString() + ESC + "GB" + bmp.Length.ToString("D5")+ ","+ Encoding.ASCII.GetString(bmp) + "\r");
            }   
            original.Dispose();
            return true;
        }




        /// <summary>
        /// 获取byte[]指令
        /// </summary>
        public byte[] GetCommand()
        {
            return Encoding.GetEncoding("gb18030").GetBytes(PrintCommand.ToString());
        }
    }

调用方法:

            Printer_SBPL_SDK SBPL = new Printer_SBPL_SDK();
            SBPL.AddStart();
            SBPL.AddPrintSpeed(4);
            SBPL.AddGridLine(0, 8, 8, 422, 628, 2, 2);
            SBPL.AddLine(0,8,150,422,2,false);
            SBPL.AddText(0,45,16,1,1,2,9, "CARD NO.");
            SBPL.AddCode128(0,424,328, "CardNo!",2,40);
            SBPL.AddPrintQty(1);
            SBPL.AddEnd();
            //1111
            string a = SBPL.PrintCommand.ToString();
            //2222
            byte[]  b= GetCommand();

把b转换成byte[]发送到打印机串口即可.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanwenhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值