多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > android 控制POS機圖文打印(二)

android 控制POS機圖文打印(二)

來源:程序員人生   發布時間:2014-12-16 08:40:29 閱讀次數:3147次

上1篇文章結束了ESC/POS的指令集,沒看過的可以去看1下,可以當作工具文檔來使用的

android 控制POS機圖文打印(1)

這1篇正式介紹如何使用POS機來打印圖文信息。

首先介紹1下,ESC/POS指令是如何使用的,

字體加粗指令:

byte[] FONT_B = new byte[3];

FONT_B[0] = 27;

FONT_B[1] = 33;

FONT_B[2] = 8;

字體縱向放大1倍:

byte[] CLEAR_FONT = new byte[3];

CLEAR_FONT[0] = 0x1c;

CLEAR_FONT[1] = 0x21;

CLEAR_FONT[2] = 0;

清除字體放大指令:

byte[] FD_FONT = new byte[3];

FD_FONT[0] = 0x1c;

FD_FONT[1] = 0x21;

FD_FONT[2] = 4;

打印條形碼指令:

byte[] PRINT_CODE = new byte[9];

PRINT_CODE[0] = 0x1d;

PRINT_CODE[1] = 0x68;

PRINT_CODE[2] = 120;

PRINT_CODE[3] = 0x1d;

PRINT_CODE[4] = 0x48;

PRINT_CODE[5] = 0x10;

PRINT_CODE[6] = 0x1d;

PRINT_CODE[7] = 0x6B;

PRINT_CODE[8] = 0x02;

等等的指令使用。。。

可以參考下上1篇文章的指令集來進行設置。其中,ESC/POS指令是可以進行10進制和106進制的設定的,這個大家要注意了。

接下來是介紹如何連接到打印機。

private static String PRINT_IP = "192.168.1.111";// 打印機IP地址

private static int PRINT_PORT = 9100;// 打印機端口 默許為9100 建議不要修改打印機端口,修改了可能會連接不上的

這里設定了打印機的IP地址和端口,其中,端口號為9100是打印機默許的設置,最好就不要去修改,如果修改了,可能致使連接不上的,我1開始的時候設置了9000,就連接不上了。。。

然后就通過socket進行連接打印機

// 建立打印機連接

socket = new Socket();

InetSocketAddress iSocketAddress = new InetSocketAddress(PRINT_IP, PRINT_PORT);// 綁定打印機

socket.connect(iSocketAddress);// 建立連接

接下來就是寫1個打印的方法,調用打印機傳輸指令和數據到打印機進行打印。

直接上代碼了,代碼里面的注釋得非常清楚

/** * @param PRINT_DATA * 小票主要數據 * @param GS_INFO * 小票附帶信息 * @param CAIDAN_SN * 小票號碼 */ public void print(List<Map<String, Object>> PRINT_DATA,Map<String, String> GS_INFO, String CAIDAN_SN) { if (PRINT_DATA != null && PRINT_DATA.size() > 0) { try { // 條碼打印指令 byte[] PRINT_CODE = new byte[9]; PRINT_CODE[0] = 0x1d; PRINT_CODE[1] = 0x68; PRINT_CODE[2] = 120; PRINT_CODE[3] = 0x1d; PRINT_CODE[4] = 0x48; PRINT_CODE[5] = 0x10; PRINT_CODE[6] = 0x1d; PRINT_CODE[7] = 0x6B; PRINT_CODE[8] = 0x02; // 清除字體放大指令 byte[] FD_FONT = new byte[3]; FD_FONT[0] = 0x1c; FD_FONT[1] = 0x21; FD_FONT[2] = 4; // 字體加粗指令 byte[] FONT_B = new byte[3]; FONT_B[0] = 27; FONT_B[1] = 33; FONT_B[2] = 8; // 字體縱向放大1倍 byte[] CLEAR_FONT = new byte[3]; CLEAR_FONT[0] = 0x1c; CLEAR_FONT[1] = 0x21; CLEAR_FONT[2] = 0; // 計算合計金額 int price = 0; // 初始化打印機 socketOut.write(27); socketOut.write(64); socketOut.write(FD_FONT);// 字體放大 socketOut.write(FONT_B);// 字體加粗 socketOut.write(10); writer.write(" " + GS_INFO.get("GS_Name") + " "); writer.flush();// 關鍵,很重要,不然指令1次性輸出,后面指令覆蓋前面指令,致使取消放大指令無效 socketOut.write(CLEAR_FONT); socketOut.write(10); writer.write("NO: " + CAIDAN_SN + " "); writer.write("------------------------------ "); writer.write("買家姓名: " + GS_INFO.get("GS_user_name") + " "); writer.write("地址: " + GS_INFO.get("GS_address") + " "); writer.write("聯系電話: " + GS_INFO.get("GS_tel") + " "); writer.write("付款方式: " + GS_INFO.get("GS_pay_type") + " "); writer.write("------------------------------ "); writer.write(Fix_String_Lenth(1,Colum_Name[0], 4) + Fix_String_Lenth(0,Colum_Name[1], 14) + Fix_String_Lenth(1,Colum_Name[2], 4) + Fix_String_Lenth(1,Colum_Name[3], 6) + " "); for (int i = 0; i < PRINT_DATA.size() - 1; i++) { writer.write(Fix_String_Lenth(1,i + 1 + "", 2) + Fix_String_Lenth(0,PRINT_DATA.get(i).get("cai_name").toString(), 14) + Fix_String_Lenth(1,PRINT_DATA.get(i).get("cai_num").toString(), 4) + Fix_String_Lenth(1,PRINT_DATA.get(i).get("cai_price").toString(), 6) + " "); price += Double.parseDouble(PRINT_DATA.get(i).get("cai_price").toString()); } // 打印2維碼 Bitmap bmp = (Bitmap)PRINT_DATA.get(PRINT_DATA.size() - 1).get("erweima"); byte[] data = new byte[] { 0x1B, 0x33, 0x00 }; socketOut.write(data); data[0] = (byte)0x00; data[1] = (byte)0x00; data[2] = (byte)0x00; //重置參數 int pixelColor; // ESC * m nL nH 點陣圖 byte[] escBmp = new byte[] { 0x1B, 0x2A, 0x00, 0x00, 0x00 }; escBmp[2] = (byte)0x21; //nL, nH escBmp[3] = (byte)(bmp.getWidth() % 256); escBmp[4] = (byte)(bmp.getWidth() / 256); // 每行進行打印 for (int i = 0; i < bmp.getHeight() / 24 + 1; i++){ socketOut.write(escBmp); for (int j = 0; j < bmp.getWidth(); j++){ for (int k = 0; k < 24; k++){ if (((i * 24) + k) < bmp.getHeight()){ pixelColor = bmp.getPixel(j, (i * 24) + k); if (pixelColor != ⑴){ data[k / 8] += (byte)(128 >> (k % 8)); } } } socketOut.write(data); // 重置參數 data[0] = (byte)0x00; data[1] = (byte)0x00; data[2] = (byte)0x00; } //換行 byte[] byte_send1 = new byte[2]; byte_send1[0] = 0x0d; byte_send1[1] = 0x0a; socketOut.write(byte_send1); } //換行 byte[] byte_send2 = new byte[2]; byte_send2[0] = 0x0d; byte_send2[1] = 0x0a; //發送測試信息 socketOut.write(byte_send2); writer.write("------------------------------ "); writer.write("本單共" + (PRINT_DATA.size() - 1) + "件商品,合計費用:" + price + "元 "); writer.write("------------------------------ "); writer.write(" 謝 謝 惠 顧 "); // 下面指令為打印完成后自動走紙 writer.write(27); writer.write(100); writer.write(4); writer.write(10); writer.close(); socketOut.close(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
打印文字是傳輸String過去進行打印的,而需要打印圖片的話比較麻煩1下,需要把圖片轉換成點陣數據然落后行每行打印,可以參考print方法。

然后直接調用該方法就能夠進行打印了,記住,android4.0以后不能在主線程中履行了,需要新建1個線程來履行該方法,如

new Thread() { <span style="white-space:pre"> </span>public void run() { <span style="white-space:pre"> </span>try { <span style="white-space:pre"> </span>new PrintLine().print(lists, mapgs, sn); <span style="white-space:pre"> </span>} catch (IOException e) { <span style="white-space:pre"> </span>e.printStackTrace(); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>}; }.start();
其實android調用pos機進行打印也不是想象中的那末難弄的,只要把ESC/POS指令掌握了,如何傳輸指令和數據過去弄定了,就不難了,如果還需要其他操作,比如打印特殊符號,字體的其他效果的打印等等,都可以參考print方法中傳輸指令的方式進行設定,pos機就可以辨認到指令接收到數據進行打印了,是否是挺簡單的?有甚么問題大家可以1起討論的,本人也是初次接觸pos機的。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久五月尺 | 2020国产v亚洲v天堂高清 | 一区视频 | 一级日韩 | 91极品国产 | 久久久久久久综合日本亚洲 | 综合久久一区二区三区 | 黑人疯狂做人爱视频 | 欧美手机看片 | 国产精品欧美韩国日本久久 | v视界成人影院在线视频 | 欧美日韩国产一区二区三区 | 成人午夜免费观看 | 波多野结衣久久高清免费 | 91在线色 | 日本在线国产 | 日本-区二区三区免费精品 日本人69式视频最长 | 一本久道久久综合中文字幕 | freexxx性亚洲xxxx| 伊人久久免费 | 真人毛片免费全部播放完整 | 日韩 欧美 亚洲 中文字幕 | 亚洲精品456播放 | 美女享受黑人的巨茎 | xxxxwww日本| 一二三四视频免费视频 | 欧美视频日韩专区午夜 | 国产成人精品午夜二三区 | 日本护士xxxxx在线 | 爱呦视频在线播放网址 | 中文字幕视频二区 | 最近免费字幕中文大全视频 | 免费观看欧美一级牲片一 | 成人18网址在线观看 | 日本特黄a级高清免费酷网 日本特黄的免费大片视频 日本特黄高清免费大片爽 日本特黄色大片 | 日本乱人伦片中文字幕三区 | 国产三级中文字幕 | 秋霞理论在一l级毛片 | ck7788免费视频 | 毛片免费网 | 国产一区二区三区国产精品 |