小票打印机指令集封装(支持EPSON指令)

最近写了一些关于小票打印机的程序,不难,但是记录下来,作为足迹吧。
现在市场上的小票机基本都支持EPSON指令。指令集文档
对指令集进行了自己的封装,方便以后调用:

package aheiziUtil;

import java.io.UnsupportedEncodingException;

public class PrinterCmdUtils {
    
    public static final byte ESC = 27;//换码
    public static final byte FS = 28;//文本分隔符
    public static final byte GS = 29;//组分隔符
    public static final byte DLE = 16;//数据连接换码
    public static final byte EOT = 4;//传输结束
    public static final byte ENQ = 5;//询问字符
    public static final byte SP = 32;//空格
    public static final byte HT = 9;//横向列表
    public static final byte LF = 10;//打印并换行(水平定位)
    public static final byte CR = 13;//归位键
    public static final byte FF = 12;//走纸控制(打印并回到标准模式(在页模式下) )
    public static final byte CAN = 24;//作废(页模式下取消打印数据 )
    
//------------------------换行-----------------------------
    /**
     * 换行
     * @param lineNum要换几行
     * @return
     */
    public static byte[] nextLine(int lineNum)
    {
            byte[] result = new byte[lineNum];
            for(int i=0;i<lineNum;i++)
            {
                result[i] = LF;
            }
            
            return result;
    }
    
//------------------------加粗-----------------------------
 
    
    //选择加粗模式
    public static String boldOn()
    {
        byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 69;
        result[2] = 0xF;
        return new String(result);
    }
    
    
    //取消加粗模式
    public static String boldOff()
    {
        byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 69;
        result[2] = 0;
        return new String(result);
    }
    
//------------------------对齐-----------------------------
   
    
    /**
     * 左对齐
     * @return
     * @throws UnsupportedEncodingException 
     */
    public static String alignLeft()
    {
            byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 97;
        result[2] = 0;
        return new String(result);
    }
    
    
    /**
     * 居中对齐
     * @return
     * @throws UnsupportedEncodingException 
     */
    public static String alignCenter()
    {
            byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 97;
        result[2] = 1;
        return new String(result);
    }
    
    
    /**
     * 右对齐
     * @return
     */
    public static byte[] alignRight()
    {
            byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 97;
        result[2] = 2;
        return result;
    }

    
    /**
     * 水平方向向右移动col列
     * @param col
     * @return
     */
    public static byte[] set_HT_position( byte col )
    {
        byte[] result = new byte[4];
        result[0] = ESC;
        result[1] = 68;
        result[2] = col;
        result[3] = 0;
        return result;
    }

    /**
     * Select Font A
     * ESC M n
     * @return bytes for this command
     * @throws UnsupportedEncodingException 
     */
    public static String select_fontA()
    {
        byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 77;
        result[2] = 0;
        return new String(result);
    }

    /**
     * Select Font B
     * ESC M n
     * @return bytes for this command
     * @throws UnsupportedEncodingException 
     */
    public static String select_fontB()
    {
        byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 77;
        result[2] = 1;
        return new String(result);
    }

    /**
     * Select Font C ( some printers don't have font C )
     * ESC M n
     * @return bytes for this command
     * @throws UnsupportedEncodingException 
     */
    public static String select_fontC()
    {
        byte[] result = new byte[3];
        result[0] = ESC;
        result[1] = 77;
        result[2] = 2;
        return new String(result);
    }

    //反显打印
    public static String reversePrint(){
         byte[] result = new byte[3];
         result[0] = GS;
         result[1] = 66;
         result[2] = 1;
         return new String(result);
    }
    
    //取消反显
    public static String reverseCancel(){
     byte[] result = new byte[3];
        result[0] = GS;
        result[1] = 66;
        result[2] = 0;
        return new String(result);
    }
    
    

/****************************下划线*******************************/
    
    //下划线一点宽(不支持汉字)
    public static String underlineOne(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 45;
          result[2] = 1;
          return new String(result);
      }
    
  //下划线两点宽(不支持汉字)
    public static String underlineTwo(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 45;
          result[2] = 2;
          return new String(result);
      }
    
    //取消下划线(不支持汉字)
    public static String UnderlineCancle(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 45;
          result[2] = 0;
          return new String(result);
      }

/****************************跳格*******************************/
    
    //设置横向跳格位置
    public static String Jump(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 68;
          result[2] = 0;
          return new String(result);
      }
    
/****************************倍数放大*******************************/
    
    //纵向放大两倍(汉字,英文,数字都支持)
    public static String longitudinalDouble(){
         byte[] result = new byte[3];
          result[0] = GS;
          result[1] = 33;
          result[2] = 1;
          return new String(result);
      }
    
    //横向放大两倍(汉字,英文,数字都支持)
    public static String transverseDouble(){
         byte[] result = new byte[3];
          result[0] = GS;
          result[1] = 33;
          result[2] = 16;
          return new String(result);
      }
    
    //纵向,横向放大两倍(汉字,英文,数字都支持)
    public static String bothDouble(){
         byte[] result = new byte[3];
          result[0] = GS;
          result[1] = 33;
          result[2] = 17;
          return new String(result);
      }
    
    //纵向,横向放大取消(汉字,英文,数字都支持)
    public static String ZoomCancel(){
         byte[] result = new byte[3];
          result[0] = GS;
          result[1] = 33;
          result[2] = 0;
          return new String(result);
      }
    
    //倍宽,倍高
    public static String doubleFont(){
         byte[] result = new byte[3];
           result[0] = FS;
           result[1] = 87;
           result[2] = 1;
           return new String(result);
       }
    
    //取消倍宽,倍高
    public static String doubleCancel(){
         byte[] result = new byte[3];
          result[0] = FS;
          result[1] = 87;
          result[2] = 0;
          return new String(result);
      }
    
    //字體
    public static String fontA(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 77;
          result[2] = 0;
          return new String(result);
     }
    
    public static String fontB(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 77;
          result[2] = 1;
          return new String(result);
     }
    
    //字符集
    public static String fontji(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 82;
          result[2] = 15;
          return new String(result);
     }
    
    //字符
    public static String fontzidingyi(){
         byte[] result = new byte[5];
          result[0] = FS;
          result[1] = 50;
          result[2] = 1;
          result[3] = 1;
          
          result[4] = 12;
          
          return new String(result);
     }
    
    //设置汉字字符左右边距
    public static String margin1(){
         byte[] result = new byte[4];
          result[0] = FS;
          result[1] = 83;
          result[2] = 1;
          result[3] = 1;
          return new String(result);
     }
    
  //设置汉字字符左右边距
    public static String margin2(){
         byte[] result = new byte[4];
          result[0] = FS;
          result[1] = 83;
          result[2] = 2;
          result[3] = 2;
          return new String(result);
     }
    
    //设置汉字字符左右边距
    public static String marginCancle(){
         byte[] result = new byte[4];
          result[0] = FS;
          result[1] = 83;
          result[2] = 0;
          result[3] = 0;
          return new String(result);
     }
    
    //设置行间距1
    public static String rowSpacing1(){
         byte[] result = new byte[3];
          result[0] = ESC;
          result[1] = 51;
          result[2] = 1;
          return new String(result);
     }
    
    //设置行间距2
    public static String rowSpacing2(){
         byte[] result = new byte[3];
          result[0] = FS;
          result[1] = 51;
          result[2] = 2;
          return new String(result);
     }
    
    //设置行间距
    public static String rowSpacingCancel(){
         byte[] result = new byte[3];
          result[0] = FS;
          result[1] = 51;
          result[2] = 0;
          return new String(result);
     }
}

将byte[]转化成了String,方便拼接字符串。
下面是测试方法。
package aheiziUtil;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;


public class TestMain {

    private static void print(String ip,String printContent) {
        Socket socket = null;
        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress(ip, 9100), 4000);
            
            System.out.println("CashierDesk=====小票机连接成功,IP:" + ip);
            
            OutputStream os = socket.getOutputStream();
            
            // 切纸命令
            String text = printContent + "\n\n\n\n\n\n";
            byte[] CMD_INIT = { 27, 64 };
            os.write(CMD_INIT);
            os.write(text.getBytes("GB2312"));
            final byte[] CMD_CUT = { 0x1D, 0x56, 0x01 };
            os.write(CMD_CUT);
            System.out.println("CashierDesk=====小票机打印完成,IP:" + ip);
            

        } catch (UnknownHostException e) {
        
            System.out.println("CashierDesk=====小票机连接失败,IP:" + ip);
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("CashierDesk=====小票机连接失败,IP:" + ip);
            e.printStackTrace();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    public static void main(String[] args) {
        String ip = "192.168.80.209";
        String printContent = "";
        
        printContent += "********************倍数放大********************\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "********************加粗加粗********************\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += PrinterCmdUtils.boldOn();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.boldOff();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += PrinterCmdUtils.boldOn();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.boldOff();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += PrinterCmdUtils.boldOn();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.boldOff();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "********************改变字体********************\n";
        
        printContent += "改变字体(仅支持英文,数字)\n";
        printContent += PrinterCmdUtils.fontB();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.fontA();
        printContent += "\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += PrinterCmdUtils.fontB();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.fontA();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += PrinterCmdUtils.fontB();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.fontA();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += PrinterCmdUtils.fontB();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.fontA();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "********************反显打印********************\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += PrinterCmdUtils.reversePrint();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.reverseCancel();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += PrinterCmdUtils.reversePrint();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.reverseCancel();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += PrinterCmdUtils.reversePrint();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.reverseCancel();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "********************汉字间距1*******************\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += PrinterCmdUtils.margin1();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += PrinterCmdUtils.margin1();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += PrinterCmdUtils.margin1();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "********************汉字间距2*******************\n";
        
        printContent += "纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.longitudinalDouble();
        printContent += PrinterCmdUtils.margin2();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.transverseDouble();
        printContent += PrinterCmdUtils.margin2();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";
        
        printContent += "横向,纵向放大两倍(汉字,英文,数字都支持)\n";
        printContent += PrinterCmdUtils.bothDouble();
        printContent += PrinterCmdUtils.margin2();
        printContent += "我是中文\nI'm english\n54123456\n";
        printContent += PrinterCmdUtils.marginCancle();
        printContent += PrinterCmdUtils.ZoomCancel();
        printContent += "\n";*/
        
        print(ip, printContent);
    }
    
}

转载于:https://www.cnblogs.com/aheizi/p/4792576.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值