android java epson串口打印機


package com.common.util.portprinter;
import java.io.IOException;
import java.io.OutputStream;
import com.common.util.PrinterParameterConf;
/**
* @author ChenMing
*
*/
public class PortPrinterBase {
    private OutputStream out;
    protected int lineCount = 40;
    private String printType="0";
    public PortPrinterBase(OutputStream out, String printType){
        this.out = out;
        this.printType = printType;
        initPrinter();
        String lineCountStr = PrinterParameterConf.printerParameterConf.getProperty(PrinterParameterConf.LINEPRINTERCHARCOUNT_NAME);
        try{
            int temp = Integer.parseInt(lineCountStr);
            this.lineCount = temp;
        }catch(Exception e){   
        }
    }
    protected final String LEFT = "LEFT";
    protected final String CENTER = "CENTER";
    protected final String RIGHT = "RIGHT";
    public static final byte HT = 0x9;
    public static final byte LF = 0x0A;
    public static final byte CR = 0x0D;
    public static final byte ESC = 0x1B;
    public static final byte DLE = 0x10;
    public static final byte GS = 0x1D;
    public static final byte FS = 0x1C;
    public static final byte STX = 0x02;
    public static final byte US = 0x1F;
    public static final byte CAN = 0x18;
    public static final byte CLR = 0x0C;
    public static final byte EOT = 0x04;
    /* 初始化打印機 */
    public static final byte[] ESC_INIT = new byte[] {ESC, '@'};
    /* 設置標准模式 */
    public static final byte[] ESC_STANDARD = new byte[] {ESC, 'S'};
    /* 設置漢字打印模式 */
    public static final byte[] ESC_CN_FONT = new byte[] {FS, '&'};
    /* 選擇字符集 */
    public static final byte[] ESC_SELECT_CHARACTER = new byte[] {ESC, 'R', 9};
    /* 設置用戶自定義漢字字體 焗7118 */
    public static final byte[] ESC_FS_2 = new byte[] {FS, 0x32, 0x71, 0x18};
    /* 取消用戶自定義字體 */
    public static final byte[] ESC_CANCEL_DEFINE_FONT = new byte[]{ESC, '%', 0};
    /* 打開錢箱指令 */
    public static final byte[] ESC_OPEN_DRAWER = new byte[]{ESC, 'p', 0x00, 0x10, (byte) 0xff};
    /* 切紙指令GS V m  
    * m  0,48 Executes a full cut(cuts the paper completely)
    *    1,49 Excutes a partilal cut(one point left uncut)
    */
   public static final byte[] POS_CUT_MODE_FULL = new byte[]{GS, 'V', 0x00};
   public static final byte[] POS_CUT_MODE_PARTIAL = new byte[]{GS, 'V', 0x01};
    /* 西文字符 (半寬)字體A (6 ×12),漢字字符 (全寬)字體A (12×12) */
    public static final byte[] ESC_FONT_A = new byte[]{ESC, '!', 0};
    /* 西文字符 (半寬)字體B (8×16),漢字字符 (全寬)字體B (16×16) */
    public static final byte[] ESC_FONT_B = new byte[]{ESC, '!', 1};
    /* 12*24   0/48*/
    public static final byte[] ESC_FONTA= new byte[]{ESC, 'M', 48};
    /* 9*17    1/49*/
    public static final byte[] ESC_FONTB= new byte[]{ESC, 'M', 1};
    /* 默認顏色字體指令 */
    public static final byte[] ESC_FONT_COLOR_DEFAULT = new byte[] {ESC, 'r', 0x00};
    /* 紅色字體指令 */
    public static final byte[] ESC_FONT_COLOR_RED = new byte[] {ESC, 'r', 0x01 };
    /* 標准大小 */
    public static final byte[] FS_FONT_ALIGN = new byte[]{FS, 0x21, 1, ESC, 0x21, 1};
    /* 橫向放大一倍 */
    public static final byte[] FS_FONT_ALIGN_DOUBLE = new byte[]{FS, 0x21, 4, ESC, 0x21, 4};
    /* 縱向放大一倍 */
    public static final byte[] FS_FONT_VERTICAL_DOUBLE = new byte[]{FS, 0x21, 8, ESC, 0x21, 8, GS, '!', 0x01};
    /* 橫向縱向都放大一倍 */
    public static final byte[] FS_FONT_DOUBLE = new byte[]{FS, 0x21, 12, ESC, 0x21, 48};
    /* 靠左打印命令 */
    public static final byte[] ESC_ALIGN_LEFT = new byte[]{0x1b,'a', 0x00};
    /* 居中打印命令 */
    public static final byte[] ESC_ALIGN_CENTER = new byte[]{0x1b,'a', 0x01};
    /* 靠右打印命令 */
    public static final byte[] ESC_ALIGN_RIGHT = new byte[]{0x1b,'a', 0x02};
    /* 字體加粗 */
    public static final byte[] ESC_SETTING_BOLD = new byte[]{ESC, 0x45, 1};
    /* 取消字體加粗 */
    public static final byte[] ESC_CANCEL_BOLD = new byte[]{ESC, 0x45, 0};
    //DLE EOT n 實時狀態傳送
    //如果返回結果為22
    /**
     * 、DLE EOT n 實時狀態傳送
        [格式] ASCII碼 DLE EOT n
        十六進制碼 10 04 n
        十進制碼 16 4 n
        [范圍] 1 ≤ n ≤ 4
        [描述] 根據下列參數,實時傳送打印機狀態,參數 n 用來指定所要傳送的打印機狀態:
        n = 1:傳送打印機狀態
        n = 2:傳送脫機狀態
        n = 3:傳送錯誤狀態
        n = 4:傳送紙傳感器狀態
        [注釋] 打印機收到該命令后立即返回相關狀態
        該命令盡量不要插在2個或更多字節的命令序列中。
        即使打印機被ESC =(選擇外設)命令設置為禁止,該命令依然有效。
        打印機傳送當前狀態,每一狀態用1個字節數據表示。
        打印機傳送狀態時並不確認主機是否收到。
        打印機收到該命令立即執行。
        該命令只對串口打印機有效。打印機在任何狀態下收到該命令都立即執行。
     */
    public static final byte[] PRINT_STATE_DLE_EOT = new byte[] {DLE, EOT,0x01};
    public void initPrinter(){
        try {
            //modify by gongqiyi 20090917
            //ESC_INIT 將在清空緩存區的數據
            //out.write(ESC_INIT);
            //自定義字體
            //out.write(ESC_FS_2);
            out.write(ESC_STANDARD);
            out.write(ESC_CANCEL_DEFINE_FONT);
            out.write(ESC_FONTA);
            out.write(ESC_SELECT_CHARACTER);
            //進入漢字模式打印
            //out.write(ESC_CN_FONT);
            //out.write(ESC_FONT_B);
            //out.write(ESC_FONTA);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 走紙到切紙位置並切紙
     */
    public void executeLineFeedAndPaperCut(){
        try {
            out.write(PrinterParameterConf.printerParameterConf.getProperty
          (PrinterParameterConf.PRINTCUTLINE_NAME).getBytes());
            out.write(POS_CUT_MODE_PARTIAL);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 單據頭打印
     * @param str
     */
    public void billHeaderPrinter(String str){
        try {
            out.write(ESC_ALIGN_CENTER);
            out.write(FS_FONT_DOUBLE);
            out.write((str+"\n").getBytes());
            out.write(LF);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 叫單號打印
     * @param str
     */
    public void callNumPrinter(String str){
        try {
            out.write(ESC_ALIGN_LEFT);
            out.write(FS_FONT_DOUBLE);
            out.write((str+"\n").getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 雙倍大小字體
     * @param str
     */
    public void doubleSizePrinter(String str, String align){
        try {
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_LEFT);
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
            }else{
                out.write(ESC_ALIGN_LEFT);
            }
            out.write(FS_FONT_DOUBLE);
            out.write((str+"\n").getBytes());
            //out.write(LF);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 標准字體打印一行
     * @param str 需打印的字符串
     * @param align 打印的位置 LEFT/CENTER/RIGHT 其他為默認居左打印
     */
    public void standardPrinterLine(String str, String align){
        try{
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_CENTER);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_CANCEL_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_CANCEL_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }else{
                out.write(ESC_ALIGN_LEFT);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_CANCEL_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }
            out.write("\n".getBytes());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 標准粗體字體打印一行
     * @param str 需打印的字符串
     * @param align 打印的位置 LEFT/CENTER/RIGHT 其他為默認居左打印
     */
    public void standardBoldPrinterLine(String str, String align){
        try{
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_CENTER);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_SETTING_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_SETTING_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }else{
                out.write(ESC_ALIGN_LEFT);
                out.write(FS_FONT_ALIGN);
                out.write(ESC_CN_FONT);
                out.write(ESC_SETTING_BOLD);
                if("1".equals(printType)){
                    out.write(ESC_FONTA);
                }else{
                    out.write(ESC_FONT_B);
                }
                out.write(str.getBytes());
            }
            out.write("\n".getBytes());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 雙倍寬字體按行打印
     * @param str
     * @param align
     */
    public void largeSizePrinterLine(String str, String align){
        try{
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_CENTER);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(str.getBytes());
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(str.getBytes());
            }else{
                out.write(ESC_ALIGN_LEFT);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(str.getBytes());
            }
            out.write("\n".getBytes());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 雙倍高字體按行打印
     * @param str
     * @param align
     */
    public void largeHSizePrinterLine(String str, String align){
        try{
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_CENTER);
                out.write(FS_FONT_VERTICAL_DOUBLE);
                out.write(str.getBytes());
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
                out.write(FS_FONT_VERTICAL_DOUBLE);
                out.write(str.getBytes());
            }else{
                out.write(ESC_ALIGN_LEFT);
                out.write(FS_FONT_VERTICAL_DOUBLE);
                out.write(str.getBytes());
            }
            out.write("\n".getBytes());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }    /**
     * 大號字體紅色按行打印
     * @param str
     * @param align
     */
    public void largeSizeRedPrinterLine(String str, String align){
        try{
            if(CENTER.equals(align)){
                out.write(ESC_ALIGN_CENTER);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(ESC_FONT_COLOR_RED);
                out.write(str.getBytes());
            }else if(RIGHT.equals(align)){
                out.write(ESC_ALIGN_RIGHT);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(ESC_FONT_COLOR_RED);
                out.write(str.getBytes());
            }else{
                out.write(ESC_ALIGN_LEFT);
                out.write(FS_FONT_ALIGN_DOUBLE);
                out.write(ESC_FONT_COLOR_RED);
                out.write(str.getBytes());
            }
            out.write("\n".getBytes());
        }catch(IOException e) {
            e.printStackTrace();
        }
    }
    public void openDrawer(){
        try {
            out.write(ESC_OPEN_DRAWER);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public String makePrintString(int lineChars, String txt1, String txt2){
        if(txt1 == null){
            txt1 = "";
        }
        if(txt2 == null){
            txt2 = "";
        }
        int spaces = 0;
        String tab = "";
        try{
            spaces = lineChars - (txt1.getBytes().length + txt2.getBytes().length);
            for (int j = 0 ; j < spaces ; j++){
                tab += " ";
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return txt1 + tab + txt2;
    }
    public String makePrintString(int lineChars, String txt1, String txt2, String txt3){
        if(txt1 == null){
            txt1 = "";
        }
        if(txt2 == null){
            txt2 = "";
        }
        if(txt3 == null){
            txt3 = "";
        }
        int spaces = 0;
        int lineChars1 = lineChars*2/3;
        String tab = "";
        String returnStr = txt1;
        try{
            spaces = lineChars1 - (returnStr.getBytes().length + txt2.getBytes().length);
            for (int j = 0 ; j < spaces ; j++){
                tab += " ";
            }
            returnStr = txt1 + tab + txt2;
            spaces = lineChars - (returnStr.getBytes().length + txt3.getBytes().length);
            tab = "";
            for (int j = 0 ; j < spaces ; j++){
                tab += " ";
            }
            returnStr = returnStr + tab + txt3;
        }catch(Exception e){
            e.printStackTrace();
        }
        return returnStr;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM