Android連接網絡打印機,jSocket連接網絡打印機


老大寫的一個打印工具類,記錄一下。

package com.Ieasy.Tool;

import android.annotation.SuppressLint;
import java.io.IOException ;
import java.io.OutputStream ;
import java.io.PrintWriter ;
import java.net.InetSocketAddress ;
import java.net.Socket ;
import java.net.SocketAddress ;
import java.nio.charset.Charset ;

@SuppressLint("NewApi")
public class NetPrinter
{
    public Socket socket;

    public int POS_OPEN_NETPORT = 9100;// 0X238c
    public boolean IFOpen = false;
    public int Net_SendTimeout = 1000;
    public int Net_ReceiveTimeout = 1500;
    public String command = ""; //打印命令字符串
    public byte[] outbytes; //傳輸的命令集

    PrinterCMD pcmd = new PrinterCMD();
    
    /// <summary>
    /// 網絡打印機 打開網絡打印機 
    /// </summary>
    /// <param name="ipaddress"></param>
    /// <returns></returns>
    public boolean Open(String ipaddress, int netport)
    {
        if (socket == null)
        {
            try
            {
                SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
                socket = new Socket();  //Socket(ipaddress, netport,true);
                socket.connect(ipe);
                socket.setSoTimeout(Net_ReceiveTimeout);
                //socket.SendTimeout = Net_SendTimeout;
                IFOpen = true;
                //System.out.print("連接成功");
            }
            catch(Exception e)
            {
                //MessageBox.Show("連接不成功");
                e.printStackTrace();
                IFOpen = false;
            }
        }
        else
        {
            try
            {
                socket.close(); 
                SocketAddress ipe = new InetSocketAddress(ipaddress,netport);
                socket = new Socket();  //Socket(ipaddress, netport,true);
                socket.connect(ipe);
                socket.setSoTimeout(Net_ReceiveTimeout);
                //socket.SendTimeout = Net_SendTimeout;
                IFOpen = true;
            }
            catch(Exception e)
            {
                e.printStackTrace();
                IFOpen = false;
            }
        }
        return IFOpen;
    }

    /// <summary>
    /// 網絡打印機 關閉
    /// </summary>
    /// <param name="ipaddress"></param>
    /// <returns></returns>
    public void Close()
    {
        try
        {
            socket.close();
            socket = null;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
    
    /// <summary>
    /// 網絡打印機 初始化打印機
    /// </summary>
    public void Set()
    {
        try
        {
            command = pcmd.CMD_SetPos();
            OutputStream stream = socket.getOutputStream();
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    /// <summary>
    /// 網絡打印機 打印的文本
    /// </summary>
    /// <param name="pszString"></param>
    /// <param name="nFontAlign">0:居左 1:居中 2:居右</param>
    /// <param name="nfontsize">字體大小0:正常大小 1:兩倍高 2:兩倍寬 3:兩倍大小 4:三倍高 5:三倍寬 6:三倍大小 7:四倍高 8:四倍寬 9:四倍大小 10:五倍高 11:五倍寬 12:五倍大小</param>
    /// <param name="ifzhenda">0:非針打  1:針打</param> 
    public void PrintText(String pszString, int nFontAlign, int nFontSize,int ifzhenda)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();
            command = pcmd.CMD_TextAlign(nFontAlign);            
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            if (ifzhenda == 1)
            {
                command = pcmd.CMD_FontSize_BTP_M280(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII")); 
                stream.write(outbytes);

                command = pcmd.CMD_FontSize_BTP_M2801(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII")); 
                stream.write(outbytes);
            }
            else
            {
                command = pcmd.CMD_FontSize(nFontSize);
                outbytes =  command.getBytes(Charset.forName("ASCII")); 
                stream.write(outbytes);
            }

            command = pszString;// +CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("GB2312")); //Charset.defaultCharset()); //forName("UTF-8")
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return;
        }        

    }
    
    /// <summary>
    /// 網絡打印機 回車
    /// </summary>
    public void PrintEnter()
    {
        try
        {
            command = pcmd.CMD_Enter();
            OutputStream stream = socket.getOutputStream();
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    /// <summary>
    /// 網絡打印機 切割
    /// </summary>
    /// <param name="pagenum">切割時,走紙行數</param>
    public void CutPage(int pagenum)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();
            
            command = pcmd.CMD_PageGO(pagenum) + pcmd.CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
            
            command = pcmd.CMD_CutPage() + pcmd.CMD_Enter();
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
            
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }          
    }
    
    /// <summary>
    /// 網絡打印機換行
    /// </summary>
    /// <param name="lines"></param>
    public void PrintNewLines(int lines)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();        
            
            command = pcmd.CMD_FontSize(0);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
            for (int i = 0; i < lines; i++)
            {
                command = "" + pcmd.CMD_Enter();
                outbytes =  command.getBytes(Charset.forName("ASCII")); 
                stream.write(outbytes);
            }            
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
  /// <summary>
    /// 打開錢箱
    /// </summary>
    public void OpenQianXiang()
    {
        try
        {
            OutputStream stream = socket.getOutputStream();    
            command = "" + pcmd.CMC_QianXiang();
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    /// <summary>
    /// 打印條碼
    /// </summary>
    /// <param name="numstr"></param>
    /// <param name="height"></param>
    /// <param name="width"></param>
    /// <param name="numweizi">1:上方  2:下方  0:不打印數字</param>
    /// <param name="fontalign">0:居左 1:居中 2:居右</param>
    /// <param name="fontsize">字體大小0:正常大小 1:兩倍高 2:兩倍寬 3:兩倍大小 4:三倍高 5:三倍寬 6:三倍大小 7:四倍高 8:四倍寬 9:四倍大小 10:五倍高 11:五倍寬 12:五倍大小</param>
    public void PrintTiaoMa(String numstr, int height, int width, int numweizi, int fontalign, int fontsize)
    {
        try
        {
            OutputStream stream = socket.getOutputStream();                
            command = pcmd.CMD_TiaoMaHeight(height);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaWidth(width);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaWeiZi(numweizi);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            command = pcmd.CMD_TextAlign(fontalign);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            command = pcmd.CMD_FontSize(fontsize);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);

            command = pcmd.CMD_TiaoMaPrint(numstr);
            outbytes =  command.getBytes(Charset.forName("ASCII")); 
            stream.write(outbytes);
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }    
    }
}

class PrinterCMD
{
    /// <summary>
    /// 初始化打印機
    /// </summary>
    /// <returns></returns>
    public String CMD_SetPos()
    {
        return new StringBuffer().append((char)27).append((char)64).toString();
    }

    /// <summary>
    /// 換行(回車)
    /// </summary>
    /// <returns></returns>
    public String CMD_Enter()
    {
        return new StringBuffer().append((char)10).toString();
    }

    /// <summary>
    /// 對齊模式
    /// </summary>
    /// <param name="align">0:左對齊 1:中對齊 2:右對齊</param>
    /// <returns></returns>
    public String CMD_TextAlign(int align)
    {
        return new StringBuffer().append((char)27).append((char)97).append((char)align).toString();
    }

    /// <summary>
    /// 字體的大小
    /// </summary>
    /// <param name="nfontsize">0:正常大小 1:兩倍高 2:兩倍寬 3:兩倍大小 4:三倍高 5:三倍寬 6:三倍大小 7:四倍高 8:四倍寬 9:四倍大小 10:五倍高 11:五倍寬 12:五倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize(int nfontsize)
    {
        String _cmdstr = "";

        //設置字體大小
        switch (nfontsize)
        {
            case -1:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
                break;

            case 0:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)0).toString();//29 33
                break;

            case 1:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)1).toString();
                break;

            case 2:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)16).toString();
                break;

            case 3:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)17).toString();
                break;

            case 4:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)2).toString();
                break;

            case 5:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)32).toString();
                break;

            case 6:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)34).toString();
                break;

            case 7:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)3).toString();
                break;

            case 8:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)48).toString();
                break;

            case 9:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)51).toString();
                break;

            case 10:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)4).toString();
                break;

            case 11:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)64).toString();
                break;

            case 12:
                _cmdstr = new StringBuffer().append((char)29).append((char)33).append((char)68).toString();
                break;

        }
        return _cmdstr;
    }

    /// <summary>
    /// BTP-M280(針打) 倍寬倍高
    /// </summary>
    /// <param name="size">0:取消倍寬倍高模式  1:倍高模式 2:倍寬模式 3:兩倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize_BTP_M280(int size)
    {
        String _cmdstr = "";
        //只有0和1兩種模式
        int fontsize = size;

        switch (fontsize)
        {
            case 1:
                _cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)8).toString();
                break;
            case 2:
                _cmdstr = new StringBuffer().append((char)28).append((char)33).append((char)4).toString();
                break;
            case 3:
                _cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)1).toString();
                break;
            default:
                _cmdstr = new StringBuffer().append((char)28).append((char)87).append((char)0).toString();
                break;
        }

        return _cmdstr;
    }

    /// <summary>
    /// BTP-M280(針打) 倍寬倍高
    /// </summary>
    /// <param name="size">0:取消倍寬倍高模式  1:倍高模式 2:倍寬模式 3:兩倍大小</param>
    /// <returns></returns>
    public String CMD_FontSize_BTP_M2801(int size)
    {
        String _cmdstr = "";
        //只有0和1兩種模式
        int fontsize = size;

        switch (fontsize)
        {
            case 1:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)17).toString();
                break;
            case 2:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)33).toString();
                break;
            case 3:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)49).toString();
                break;
            default:
                _cmdstr = new StringBuffer().append((char)27).append((char)33).append((char)1).toString();
                break;
        }

        return _cmdstr;
    }

    /// <summary>
    /// 走紙
    /// </summary>
    /// <param name="line">走紙的行數</param>
    /// <returns></returns>
    public String CMD_PageGO(int line)
    {
        return new StringBuffer().append((char)27).append((char)100).append((char)line).toString();
    }

    /// <summary>
    /// 切割
    /// </summary>
    /// <returns></returns>
    public String CMD_CutPage()
    {
        return new StringBuffer().append((char)27).append((char)109).toString();
    }

    /// <summary>
    /// 返回狀態(返回8位的二進制)
    /// </summary>
    /// <param name="num">1:打印機狀態 2:脫機狀態 3:錯誤狀態 4:傳送紙狀態</param>
    /// 返回打印機狀態如下:
    /// 第一位:固定為0
    /// 第二位:固定為1
    /// 第三位:0:一個或兩個錢箱打開  1:兩個錢箱都關閉
    /// 第四位:0:聯機  1:脫機
    /// 第五位:固定為1
    /// 第六位:未定義
    /// 第七位:未定義
    /// 第八位:固定為0
    /// 
    /// 返回脫機狀態如下:
    /// 第一位:固定為0
    /// 第二位:固定為1
    /// 第三位:0:上蓋關  1:上蓋開
    /// 第四位:0:未按走紙鍵  1:按下走紙鍵
    /// 第五位:固定為1
    /// 第六位:0:打印機不缺紙  1: 打印機缺紙
    /// 第七位:0:沒有出錯情況  1:有錯誤情況
    /// 第八位:固定為0
    /// 
    /// 返回錯誤狀態如下:
    /// 第一位:固定為0
    /// 第二位:固定為1
    /// 第三位:未定義
    /// 第四位:0:切刀無錯誤  1:切刀有錯誤
    /// 第五位:固定為1
    /// 第六位:0:無不可恢復錯誤  1: 有不可恢復錯誤
    /// 第七位:0:打印頭溫度和電壓正常  1:打印頭溫度或電壓超出范圍
    /// 第八位:固定為0
    /// 
    /// 返回傳送紙狀態如下:
    /// 第一位:固定為0
    /// 第二位:固定為1
    /// 第三位:0:有紙  1:紙將盡
    /// 第四位:0:有紙  1:紙將盡
    /// 第五位:固定為1
    /// 第六位:0:有紙  1:紙盡
    /// 第七位:0:有紙  1:紙盡
    /// 第八位:固定為0
    /// <returns></returns>
    public String CMD_ReturnStatus(int num)
    {
        return new StringBuffer().append((char)16).append((char)4).append((char)num).toString();
    }

    /// <summary>
    /// 條碼高寬
    /// </summary>
    /// <param name="num"></param>
    /// <returns></returns>
    public String CMD_TiaoMaHeight(int num)
    {
        //return ((char)29).append"h" + ((char)num).toString();
        return new StringBuffer().append((char)29).append((char)104).append((char)num).toString();
    }

    /// <summary>
    /// 條碼寬度
    /// </summary>
    /// <param name="num"></param>
    /// <returns></returns>
    public String CMD_TiaoMaWidth(int num)
    {
        //return ((char)29).append"w" + ((char)num).toString();   
        return new StringBuffer().append((char)29).append((char)119).append((char)num).toString();
    }

    /// <summary>
    /// 條碼數字打印的位置
    /// </summary>
    /// <param name="num">1:上方  2:下方  0:不打印數字</param>
    /// <returns></returns>
    public String CMD_TiaoMaWeiZi(int num)
    {
        return new StringBuffer().append((char)29).append("H").append((char)num).toString();
    }

    /// <summary>
    /// 開始打印(條碼類型為CODE39)
    /// </summary>
    /// <param name="numstr"></param>
    /// <returns></returns>
    public String CMD_TiaoMaPrint(String numstr)
    {
        //return ((char)29).append"k" + ((char)4).appendnumstr + ((char)0).toString();
        return new StringBuffer().append((char)29).append((char)107).append((char)4).append(numstr).append ((char)0).toString();
    }
    
    /// <summary>
    /// 打開錢箱
    /// </summary>
    /// <returns></returns>
    public String CMC_QianXiang()
    {
        return new StringBuffer().append((char)27).append((char)112).append((char)0).append((char)60).append((char)255).toString();
    }
}

 


免責聲明!

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



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