我們點的小程序有這樣的功能:客人點餐時,后廚的小票打印機(jī)會自動打印小票。
這里小票打印機(jī)的排版不像表格那么容易,需要計算每行的字符數(shù),程序通過增加空格來實現(xiàn)排版對齊的目標(biāo)。因為中文和英文占位寬度不一,中文占用空間是英文的兩倍。因此在處理的時候,需要計算字符的長度后再處理。
常用的小票打印機(jī)有兩種,分別是58mm 和80mm的,58mm的機(jī)器,一行打印16個漢字,32個字母;80mm的機(jī)器,一行打印24個漢字,48個字母
廢話不多說,我們看一下最終要實現(xiàn)的排版效果圖:
看一下打印內(nèi)容的代碼:
String prcontent = "<CB>打印測試</CB><BR>";
prcontent += "名稱 單價 數(shù)量 金額<BR>";
prcontent += "--------------------------------<BR>";
prcontent += formStr("產(chǎn)品名","10.00","1","10.00");
prcontent += "備注:***<BR>";
prcontent += "--------------------------------<BR>";
prcontent += "合計:11元<BR>";
prcontent += "聯(lián)系電話:***<BR>";
prcontent += "訂餐時間:***<BR>";
上面是一段標(biāo)準(zhǔn)的打印小票的代碼,每一行的內(nèi)容調(diào)用方法formStr來格式化(自動換行,列對齊)排版。
/**
* 格式化內(nèi)容(58mm的機(jī)器,一行打印16個漢字,32個字母;80mm的機(jī)器,一行打印24個漢字,48個字母)這里按58mm處理的,如果是80的機(jī)器可以參考修改
* @param tit 名稱 6字母||12英文
* @param fee 單價 6個英文
* @param n 數(shù)量 4個英文
* @param total 總計 6個英文
* @return
*/
public String formStr(String tit,String fee,String n,String total){
String ret="";
if(ret==null){
return "";
}
String title=tit;
int strlen=0;
try{
strlen=("GBK").length;
} catch (UnsupportedEncodingException ex) {
}
int tnum=6;
int titlen= tnum*2;//標(biāo)題12字母
String otherStr =addSpace(fee,6) + addSpace(n,4)+ addSpace(total,6);
if(strlen<=titlen){//不夠12列的補齊
ret=padStr(title,titlen)+otherStr+"<BR>";
}else{//超過12列的要換行
int sizes=()-1+ tnum)/ tnum;
for(int m=0;m<sizes;m++){
String childStr = substring(title, m * tnum, (m + 1) * tnum);
if(m==0){//第一行
ret=childStr+otherStr+"<BR>";
}else{
ret+=childStr+"<BR>";
}
}
}
return ret;
}
/**
*字符串截取
*/
public static String substring(String str, int f, int t) {
if (f > ())
return null;
if (t > ()) {
return (f, ());
} else {
return (f, t);
}
}
/**
*英文字符串的處理方法,不夠長度補空格
*/
public static String addSpace(String s, int size) {
String str=s;
int len = ();
if (len < size) {
for (int i = 0; i < size - len; i++) {
str += " ";
}
}
return str;
}
/**
*帶中、英文字符串的處理方法,中文補兩空格,英文補一空格
*/
public String padStr(String s,int n){
String ret="";
String title=s;
int strlen=0;
try{
strlen=("GBK").length;
} catch (UnsupportedEncodingException ex) {
}
if(strlen<=n){//不夠列的補齊
int spacenum=n-strlen;
for(int i=1;i<=spacenum;i++){
title+=" ";
}
}
ret=title;
return ret;
}
好了,上面的幾個方法可以集成到你的工具類里,使用時直接調(diào)用即可。
最后說一下實現(xiàn)原理:
1、定義好每一列的寬度
2、計算每一列字符長度(中文按2倍數(shù))
3、如果不夠長,那么調(diào)用padStr,addSpace方法,補充空格
4、如果長度超了,那么按指定長度分割成多行,遍歷每一行排版
最后看一下點餐小程序:
直接看效果圖吧。
門店管理端
前端用戶點餐頁面
1.《關(guān)于打印機(jī)怎么操作打印小票,你需要知道這些小票打印機(jī)的排版:自動換行和列對齊的解決方法》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《關(guān)于打印機(jī)怎么操作打印小票,你需要知道這些小票打印機(jī)的排版:自動換行和列對齊的解決方法》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/why/3167989.html