不知道大家有沒有遇到這種情況,有些東西想整理但卻不知道怎麼去整理。在做之前一頭霧水,百度上也找不到答案,然後搞出來又發現沒什麼內容,所以好像也沒什麼可整理。 但是更多,我想說的是,我們還是要學會去總結,為什麼我花了那麼長時間,以及下次遇到這種情況,我如何下手?也希望對和我這樣的菜菜有點幫助。 需求 ...
不知道大家有沒有遇到這種情況,有些東西想整理但卻不知道怎麼去整理。在做之前一頭霧水,百度上也找不到答案,然後搞出來又發現沒什麼內容,所以好像也沒什麼可整理。
但是更多,我想說的是,我們還是要學會去總結,為什麼我花了那麼長時間,以及下次遇到這種情況,我如何下手?也希望對和我這樣的菜菜有點幫助。
需求
Android藍牙連接TSC標簽印表機列印。(熱敏印表機要用熱敏紙)
說明
有關印表機,一般都會提供 有關開發的 SDK ,開發文檔。Android可以參考,其實這可能對很多人來說都是很簡單的一件事,但是,難免會遇到一些意外。
回顧當時
其實剛開始還有點信心滿滿,然後把 jar 包複製到 lib 文件夾中,然後將文檔提供的代碼複製到 Android 中,然後結果:失敗的。崩掉
然後就開始了我的找問題之路···各種測試,大多都是靠運氣
效果
總結
- 問題一:在代碼中有一個參數是設置列印的份數,以及初始化的時候會設置紙張的大小間隙等等。印表機列印一張出來很多張,並且執行一次之後印表機就報 卡紙異常?
這有時候不是代碼問題,開發的時候會給一個工具包,進行感應器矯正就可以正常了(這裡沒有連接印表機,先讀取狀態連接印表機再進行操作)
- 問題二:指令不執行
註意你的指令後面有沒有 /r/n ,指令可以分段,在結束位置加上 /r/n 執行
- 問題三:列印的文本較長,不會自動換行(比如上方的二三行是一個內容)
這裡我不知道有沒有什麼特定的設置,但是我通過其他方式實現了效果,把原有的字元串進行分割分行列印
for (int i = 0; i < invCode.length(); i = i + 10) {
TscDll.sendcommand("TEXT 350," + (75 + i * 3) + ",\"0\",0,12,12,3,\" " + invCode.substring(i, i + 10 < invCode.length() ? i + 10 : invCode.length()) + "\" \r\n ");
}//invCode為列印的內容
- 問題四:中文亂碼問題(上面效果圖就是中文亂碼格式之一,成功的沒有保存圖片)
剛開始我也看了文檔,在列印文字的時候可以選擇相應的字體進行列印,首先保證這個印表機存在某種字體支持中文(用工具把字體傳入印表機),然後進行調用。根據這個思路,進行了一系列的操作還是無法解決中文亂碼的問題
實際上操作是不要直接傳中文,要將文字轉換為 byte[] 類型進行提交
String SC1="這是一段文字";
byte[] QQ2 = new byte[1024];
try {
QQ2=SC1.getBytes("GB2312");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TscDll.sendcommand("TEXT 20,30,\"FONT001\",0,2,2,\"");
TscDll.sendcommand(QQ2);
TscDll.sendcommand("\"\r\n");
最後
這是兩個月之後再回過頭來整理,不知道有沒有遺漏的地方。雖然好像是一個很簡單的功能。but 這是從外部對接過來的項目,遇到了一系列的配置問題不說(比如之前我們會引用v4的包,但是現在都統一AndroidX),再到列印文檔的閱讀(還是英文版的),根據提供的demo進行調試,以及遇到的一系列問題,以及百度上找不到答案的焦急(也找了官網)。然後一遍一遍讓自己靜下心來閱讀參考文檔。。。年前做的,再到年後再去客戶那邊的時候,已經正在使用了,當時第一眼還沒認出來那竟是我做的東西,那一刻,一丟丟的成就感