国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android手機的藍牙票據(jù)打印機API開發(fā)

2017-04-19 11:01李煥麗李月香
關鍵詞:邊框打印機表格

李煥麗,李月香

(山西大學 計算機與信息技術學院,太原 030006)

基于Android手機的藍牙票據(jù)打印機API開發(fā)

李煥麗,李月香

(山西大學 計算機與信息技術學院,太原 030006)

本文針對微型票據(jù)打印機的應用特點,解析了ZJ-5802藍牙微型票據(jù)打印機的底層功能,用Java語言開發(fā)了基于Android手機的API。此API具有文本編輯和打印、快速曲線打印、表格打印、圖片打印等功能,與打印機生產(chǎn)商提供的接口函數(shù)相比較,功能更豐富,對打印機的操控更為方便、靈活。本文開發(fā)硬件設備底層功能的方法對于軟件開發(fā)者具有重要的參考價值。

Android手機;藍牙熱敏票據(jù)打印機;文本編輯;曲線打印

引 言

隨著智能手機的普及,手機APP的數(shù)量急速上升,同時一些便攜式藍牙設備的面市也更加拓寬了手機APP的應用領域[1],因此手機APP開發(fā)已經(jīng)成為當前一項很熱門的技術。但是要在手機APP中實現(xiàn)對藍牙設備的操控[2],靈活方便地使用這些設備的功能,則需要根據(jù)設備的底層操作命令進行二次開發(fā)。因為大部分設備廠商所提供的最基本的接口函數(shù)很難滿足各種用戶的功能需求,這就給手機APP開發(fā)者帶來了一定的困難,增加了開發(fā)的工作量。

本文在華為MT7-TL10手機上,針對ZJ-5802藍牙微型熱敏票據(jù)打印機[3-4]開發(fā)了一個API,為用戶提供了功能豐富的對打印機操控更靈活、更方便的接口函數(shù)。

1 API設計概述

ZJ-5802藍牙熱敏票據(jù)打印機體積小、待機時間長,作為移動打印設備,使用量很大,廠商為用戶提供了文本打印和圖片打印接口函數(shù),但是這些功能非常簡單,僅僅能夠打印字符串、.txt文本文件和.png、.jpg圖片文件,并且還需要根據(jù)文件所在路徑修改函數(shù)中的相關語句,因此要滿足用戶各種打印需求,二次開發(fā)工作量還是很大的。本文通過解析打印機底層命令,在Android智能手機上設計開發(fā)了更加方便用戶二次開發(fā)的API。本API由文本編輯、文本打印、圖片打印、曲線打印、表格打印函數(shù)組成。

① 文本編輯函數(shù)提供了一個文本格式函數(shù)和一個文本編輯界面函數(shù)。文本格式函數(shù)是將打印機的底層命令集成在一個函數(shù)中;文本編輯界面函數(shù)提供了一個可視化的格式編輯操作環(huán)境。

② 文本打印函數(shù)可以打印字符串、.txt文件。

③ 圖片打印函數(shù)是調(diào)用了廠商提供的圖片打印函數(shù),可以打印.png、.jpg圖片文件。

④ 曲線打印函數(shù)可以將excel表格文件或.txt文本文件中的數(shù)據(jù)以曲線的形式打印出來。

⑤ 表格打印函數(shù)可以打印excel表格文件,但是設計excel表格時要考慮打印紙寬度的限制,ZJ-5802打印機紙的有效打印寬度為48 mm。

以上函數(shù)中圖片打印、字符串打印和.txt文件打印功能是調(diào)用了廠商提供的函數(shù),下面介紹本API中新開發(fā)函數(shù)的設計方法。

2 文本編輯函數(shù)設計

ZJ-5802打印機默認的文本打印格式是普通小五號字體,若需要調(diào)整字符格式,需要向打印機發(fā)送字符串及設置字符串格式的命令[5]。當打印的文本格式變化較多時,編寫打印輸出代碼就比較繁瑣。API中設計了兩個文本編輯函數(shù),一個是文本格式函數(shù),將打印機所有文本格式底層命令集成到set_format函數(shù)中,調(diào)用函數(shù)時將打印輸出字符串及其格式放入輸入?yún)?shù)中即可,無需再查看格式命令表;另一個是文本編輯界面函數(shù)ui_edit,該函數(shù)提供了一個可視化文本編輯界面,編輯格式時只要點擊相應的格式按鈕即可,不需要考慮格式命令或參數(shù)的定義。

2.1 文本格式函數(shù)設計

文本格式函數(shù)set_format(String printString,int downline,int font,int size,int aglin,int upsidedown,int white)中共有7個參數(shù),第1個參數(shù)是要打印的字符串,其余6個都是設置文本格式的參數(shù),每一個參數(shù)和一種打印機底層字符格式命令相對應。字符格式命令見表1,函數(shù)輸入?yún)?shù)定義見表2。

表1 打印機底層字符格式命令表

表2 函數(shù)set_format中的參數(shù)定義表

表2中的參數(shù)2~7分別和表1中的命令1~6相對應,在函數(shù)set_format中這些參數(shù)都有相應的文本格式定義語句,如參數(shù)2的文本格式定義語句如下:

if(downline == 1){ //downline值為1時,加下劃線格式

byte[] down_line = {0x1D,0x21,0x11};

//將加下劃線命令放入數(shù)組down_line 中

mService.write(down_line);

//將數(shù)組down_line中的命令發(fā)送給打印機

}else{ //downline值為0時,不發(fā)送格式命令

}

所有的格式定義完成后,最后輸出字符串到打印機,這個字符串的打印格式由函數(shù)前面的格式定義語句所設置,打印輸出語句在函數(shù)的最后,其代碼為:

mService.sendMessage(printString);

//將字符串輸出到打印機

2.2 文本編輯界面函數(shù)設計

文本編輯界面函數(shù)ui_edit提供了圖1所示的界面,其中包含了所有文本編輯操作按鈕、打開文件、保存文件和打印按鈕。通過這個界面可以輸入文字,也可以點擊打開文件按鈕,將已有的.txt文件導入到文本框內(nèi)。對文本進行格式編輯時,只需要將光標放置在某一行的任意位置,然后點擊編輯操作按鈕即可完成。例如要將圖2中第一行的漢字“溫度記錄表”設置為加粗、字體長寬放大一倍及居中格式時,將光標放在這一行中,然后分別點擊上方的加粗、居中按鈕,點擊字號下拉框選擇“倍高倍寬”選項即可完成,如圖3所示。完成文本格式編輯后點擊打印按鈕可以直接打印輸出,也可以將編輯后的文件保存。

圖1 文本編輯界面

ui_edit函數(shù)是用Java語句編寫了圖1所示的界面,界面內(nèi)文本輸入框中的字符、下劃線、加粗、字號等操作按鈕分別與2.1節(jié)描述的set_format函數(shù)中對應參數(shù)相關聯(lián),點擊某個按鈕,相當于設置了set_fotmat函數(shù)的某個輸入?yún)?shù)值。文本框中的每一行都要生成一個List變量list,list由7個元素組成,分別對應set_format函數(shù)中的7個輸入?yún)?shù)。例如圖2中第1行對應的list變量為“溫度記錄表”,“0”,“0”,“0”,“0”,“0”,“0”,圖3中第1行對應的list變量為“溫度記錄表”,“0”,“1”,“1”,“1”,“0”,“0”。編輯完成后點擊打印按鈕,就會逐行調(diào)用set_format函數(shù),輸入?yún)?shù)和這一行的list變量中的值一一對應。

圖2 導入文本后界面

圖3 文本編輯后界面

3 曲線打印函數(shù)設計

在很多應用中需要打印數(shù)據(jù)曲線,但是調(diào)用廠商提供的接口函數(shù)或根據(jù)底層命令編程都無法實現(xiàn)這個功能,如果用截屏的方式將顯示的曲線保存為圖片再進行打印,則會存在以下問題:

① 打印速度較慢,因為打印機要先將圖片轉換為位圖信息,然后再將逐行輸出打印像素點。

② 用不同手機打印效果會有不同,可能出現(xiàn)曲線較為模糊的情況。其原因主要有兩個,一是打印機的DPI(Dots Per Inch,每英寸打印的點數(shù))和手機的PPI(Pixels Per Inch,每英寸顯示的像素個數(shù))不匹配;二是接口函數(shù)功能的局限性,如ZJ-5802打印機提供的圖片打印接口函數(shù)只能解析.png、.jpg格式的圖片,而對于.jpeg或其他格式的圖片解析效果較差。

③ 如果數(shù)據(jù)很多,數(shù)據(jù)曲線在手機屏上就需要滾動顯示,多次截屏然后打印曲線顯然是件很麻煩的事情,實際應用中可操作性差。

因此本文API中設計了曲線打印函數(shù)print_line(String uriString),將數(shù)據(jù)存放在excel表格文件或.txt文本文件中,調(diào)用本函數(shù)就可以將數(shù)據(jù)以曲線的形式快速打印出來,函數(shù)的輸入?yún)?shù)String uriString是由“文件路徑/文件名”組成的字符串。

3.1 設計原理

打印機底層命令中有打印位圖命令,該命令多被應用于打印自定義字符[6]。命令格式是0x1B,0x2A,m,nL,nH,d1,d2,…,dk。其中“0x1B,0x2A”為命令碼,m為位圖模式,取值為0、1、32、33,分別表示8點單密度模式、8點雙密度模式、24點單密度模式、24點雙密度模式;nL、nH用于計算水平方向打印點的個數(shù),計算公式為nL+nH×256,nL取值為0~255之間的整數(shù),nH取值為0、1、2、3,d1,d2,…,dk是打印點的位圖數(shù)據(jù),di是一個8位的二進制數(shù),對應打印紙上1列8個點中要打印那些點的二進制值,k小于等于一行中最多打印點的個數(shù)。

打印曲線時要先確定一行打印點的個數(shù),然后從文件中讀取數(shù)據(jù),根據(jù)數(shù)據(jù)中最大值和最小值計算出曲線上每一個打印點位置值的范圍,并依次按比例計算出每一個數(shù)據(jù)在打印紙上的位置值,并將這個位置值轉換成位圖數(shù)據(jù)d1,d2,…,dk,然后向打印機發(fā)送打印位圖命令即可。

本API中選擇了8點單密度位圖模式,即m取值為0,該模式下打印機的最小出紙單位為8×192,即一次完成打印8行192列點陣。在打印曲線時,如果只打印數(shù)據(jù)對應的點,就會出現(xiàn)曲線不連續(xù)的現(xiàn)象,為了打印出連續(xù)的曲線,則要在某些數(shù)據(jù)點附近插入一定的數(shù)值,使打印的曲線變得連續(xù)但又不改變曲線的輪廓。圖4所示的是打印紙上8×16點陣的打印點,圖中標記為Ai的黑點是數(shù)據(jù)在曲線上的點。從圖中可以看出,A2、A3、A4、A5之間和A7、A8之間不連續(xù),所以需要在它們之間插入打印點,處理后的效果如圖5所示。

3.2 曲線打印結果對比

將同樣一組數(shù)據(jù)分別用圖片打印方法和本節(jié)描述的快速曲線打印方法進行打印。

圖6、圖7分別是在索愛LT18i 手機和華為MT7-TL10手機上用截屏的方式將屏幕上顯示的曲線保存為圖片,然后再調(diào)用廠商提供的圖片打印接口函數(shù)輸出打印的曲線。索愛 LT18i手機屏幕的分辨率較低,且截屏圖片是.png格式,ZJ-5802打印機對這種格式的圖片解析效果較好,所以打印出的曲線圖片清晰,打印耗時約43 s;華為MT7-TL10手機屏幕的分辨率較高,且截屏圖片是.jpeg格式,ZJ-5802打印機對這種格式的圖片解析效果較差,打印的曲線較模糊,打印耗時約51 s。而近年上市的手機大多屏幕分辯率都較高,截屏的圖片多為.jpeg格式,所以用截屏的方式打印曲線不是一種好的選擇。在華為MT7-TL10手機和索愛 LT18i手機上用快速曲線打印的方法,直接讀取數(shù)據(jù)進行打印,打印效果相同,如圖8所示,打印耗時約7 s。

圖4 只打印數(shù)據(jù)點的曲線

圖5 插入打印點后的連續(xù)曲線

圖6 索愛手機打印曲線圖

圖7 華為手機打印曲線圖

從圖中可以看出,圖8的清晰效果比圖6略差,主要是因為圖8選用的是較為簡單的8點單密度位圖模式,而圖6選用了更高密度的位圖模式。而在實際應用需求中,打印曲線主要是用于觀察數(shù)據(jù)的變化趨勢,圖8的曲線能夠滿足應用需求,而且用不同的手機打印出的效果都一樣,也容易實現(xiàn)快速打印。

圖8 快速打印曲線

4 表格打印函數(shù)設計

打印表格也是很多應用中所需要的功能,但同樣無法直接調(diào)用廠商提供的接口函數(shù)或底層命令實現(xiàn),通過截屏的方式將表格保存為圖片再打印也同樣存在第3節(jié)中描述的問題。本文API中設計了表格打印函數(shù)print_table(String uriString,int format),可實現(xiàn)快速打印excel表格的功能。函數(shù)print_table有2個輸入?yún)?shù),String uriString參數(shù)是由excel表格“文件路徑/文件名”組成的字符串,int format參數(shù)是對表格邊框格式的定義,取值為0、1、2、3,0表示不打印邊框,1表示打印表格四周邊框,2表示只打印橫邊框,3表示只打印豎邊框。

4.1 設計原理

將表格的內(nèi)容分為文字和邊框兩部分,再根據(jù)邊框的位置劃分為3種類型線段,如圖9所示。

圖9 表格邊框線段分類示意圖

類型1:橫邊框線,如圖9中①所示,線段①代表表格中所有的橫邊框線。

類型2:豎邊框線,如圖9中③所示,線段③代表表格中所有的豎邊框線。

類型3:如圖9中②、④、⑤所示的線段,②是連接表最上面橫線和它下面各條豎線的線段;④是上下單元格豎線之間的連接線;⑤是連接表最下面橫線和它上面各條豎線的線段。這些線段的使用是為了讓表格打印出來更美觀。

當表格邊框格式設定為不打印邊框時,所有邊框線段都不打印;設定為打印四周邊框時,①~⑤線段均要打??;設定為打印橫向邊框時,只打印線段①;設定為打印豎邊框時,只打印線段③。

線段①、②、④、⑤都是以自定義字符形式輸出打印,線段③使用的是字庫中的字符“|”。

用戶要根據(jù)打印紙的寬度調(diào)整表格一行中的字符個數(shù),不能超出打印紙的寬度。本文以GB2312標準字庫中12×24 ASCII字符格式為例,ZJ-5802打印機一行最多可以打印384/12=32個字符,其中包括表示邊框中豎線線段的字符。

4.2 表格打印結果對比

將同樣的表格數(shù)據(jù)分別用圖片打印方法和本節(jié)描述的快速表格打印方法進行打印。

圖10是在索愛 LT18i手機上使用截屏的方式將屏幕上顯示的表格保存為圖片,然后再調(diào)用廠商提供的圖片打印接口函數(shù)輸出打印的表格,打印時間約51 s。如果在華為MT7-TL10手機上使用這種方法打印表格,打印機無法解析.jpeg格式圖片,打印出來的是一張全部為黑色的圖片。在華為MT7-TL10手機和索愛 LT18i手機上用快速表格打印的方法,直接讀取表格數(shù)據(jù)進行打印,打印效果相同,如圖11所示。

圖10 索愛手機打印表格圖

打印時間約5 s。通過比較可以看出,使用本文的表格打印函數(shù)打印出的表格更清晰,比用圖片打印方法打印速度快了10倍,而且也無需考慮Android智能手機的型號,同時也不受手機屏幕大小的限制,可以打印有大量數(shù)據(jù)的表格。

結 語

[1] 羅富財.基于Android平臺的藍牙通信系統(tǒng)的研究與實現(xiàn)[D].保定:華北電力大學,2013.

[2] 張拓.基于Android平臺的藍牙應用開發(fā)[J].信息與電腦,2015(18):64-67.

[3] 曲小龍,喬國凱,黃正茂.一種集成藍牙功能的卷式發(fā)票打印機[J].信息技術與信息化,2013(6):149-151.

[4] 劉生第.基于低功耗藍牙的針式打印機系統(tǒng)設計[D].大連:大連理工大學,2013.

[5] 馮靜,庫少平,李捷.微型打印機打印技術分析[J].電子工程師,2006(11):56-58.

[6] 張偉東,許向南.微型打印機如何打印特殊字符[J].現(xiàn)代教育科學,2010(S1):111-112.

李煥麗(碩士研究生)、李月香(教授),主要研究方向為嵌入式系統(tǒng)應用。

[9] 滿莎, 楊恢先, 彭友,等. 基于ARM9的嵌入式無線智能家居網(wǎng)關設計[J]. 計算機應用, 2010, 30(9):2541-2544.

[10] 郝真鳴,趙男,梁鐵,等. 基于WiFi的智能樓宇監(jiān)控系統(tǒng)[J]. 測控技術,2013(10):87-89,92.

[11] 王朝華, 陳德艷, 黃國宏,等. 基于Android的智能家居系統(tǒng)的研究與實現(xiàn)[D]. 廣州:廣東工業(yè)大學, 2012.

[12] 莫太平,胡俊波,趙佩斯. 基于Android的智能家居系統(tǒng)的設計與實現(xiàn)[J]. 自動化與儀表,2015(1):33-36.

[13] 邵鵬飛,王喆,張寶儒. 面向移動互聯(lián)網(wǎng)的智能家居系統(tǒng)研究[J]. 計算機測量與控制,2012(2):474-476,479.

[14] 臧大進,劉增良,高干,等. 基于物聯(lián)網(wǎng)的智能家居系統(tǒng)設計與實現(xiàn)[J]. 襄樊學院學報,2010(11):37-39,49.

戴宇培(碩士在讀),主要從事傳感器與控制研究;張鈺(本科在讀),主要從事計算機與通信研究;劉云飛(教授),主要從事信號處理方向的研究工作。

(責任編輯:楊迪娜 收稿日期:2016-08-24)

API Development of Bluetooth Receipt Printer Based on Android Mobile Phone

Li Huanli,Li Yuexiang

(School of Computer and Information Technology,Shanxi University,Taiyuan 030006,China)

With the practical advantages of receipt printer,the APIs are developed for Andorid mobile phone using Java language based on the fundamental functions of ZJ-5802 bluetooth receipt printer.The APIs have realized the functions,such as text editing and printing,fast printing of curve tables and images printing.Compared with the interface functions provided by the printer manufacturer,these APIs provide richer functions and better flexibility for operation.The development method shows a valuable scope for the similar software development.

Android mobile phone;Bluetooth thermal printer;text editing;curve printing

TP334.8

A

?士然

2016-08-22)

猜你喜歡
邊框打印機表格
《現(xiàn)代臨床醫(yī)學》來稿表格要求
《現(xiàn)代臨床醫(yī)學》來稿表格要求
統(tǒng)計表格的要求
用Lightroom添加寶麗來邊框
給照片制作專業(yè)級的邊框
外出玩
另類3D打印機
擺脫邊框的束縛優(yōu)派
打印機基板大型注塑模具設計
FDM型混色3D打印機的設計