老大寫的一個打印工具類,記錄一下。
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(); } }