实现android 设备连接小票打印机打印小票的功能时,发现了一个好用的库:https://github.com/AlexMofer/ProjectX/tree/master/printer
android设备如何连接打印机https://blog.csdn.net/qq_25452989/article/details/82843071
我们要实现的效果:
实现时主要就是依靠printer这个库.实现页面显示的重点写过了,把中文字符串分割成数组:
https://blog.csdn.net/qq_25452989/article/details/83107296
代码:
//必须引入printer库 compile 'am.util:printer:2.1.0'
ByteArrayOutputStream byteArrayOutputStream = null;
PrinterWriter printerWriter = null;
ArrayList data = new ArrayList<>();
data.clear();
/**
* PrinterWriter58mm
* 宽度 32 英文字符 16个中文字符
* 一行最多容纳16个汉字 32个数字 或者英文字母 或者空格
*/
try {
printerWriter = new PrinterWriter58mm(PrinterWriter.HEIGHT_PARTING_DEFAULT, 300);
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.setEmphasizedOn();
printerWriter.setFontSize(1);
printerWriter.print("YCLOSET");
printerWriter.printLineFeed();
printerWriter.setFontSize(0);
printerWriter.print("衣二三");
printerWriter.printLineFeed();
printerWriter.print("发现新的自己");
printerWriter.printLineFeed();
printerWriter.print("--------------------------------");
printerWriter.printLineFeed();
printerWriter.setAlignLeft();
printerWriter.print("订单号:" + receiptsInfoMapBean.orderNo);
printerWriter.printLineFeed();
printerWriter.print("客户:" + receiptsInfoMapBean.consignee);
printerWriter.printLineFeed();
printerWriter.print("总数量:" + receiptsInfoMapBean.stockInfoList.size());
printerWriter.printLineFeed();
printerWriter.print("--------------------------------");
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.print(" 品牌 商品名 条码 ");
printerWriter.setEmphasizedOff();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
for (int i = 0; i < receiptsInfoMapBean.stockInfoList.size(); i++) {
PickCheckResult.ReceiptsInfoMapBean.StockInfoListBean stockInfoListBean =
receiptsInfoMapBean.stockInfoList.get(i);
//名字
String productName = stockInfoListBean.productName;
LogUtil.d("productName--->" + productName);
String standardNo = stockInfoListBean.standardNo;
String brandName = stockInfoListBean.brandName;
int stockCode = stockInfoListBean.stockCode;
productName = productName.replaceAll("[a-zA-Z]", "");
//衣服名字的长度
int length = productName.length();
//一共有几行
int lines = (length + 2) / 3;
//中间的一行
int center = (lines + 1) / 2;
//转为char数组
char[] chars = productName.toCharArray();
//计数 第几行了
int k = 0;
//存两个单词的品牌
String[] split = null;
for (int j = 0; j < chars.length; j += 3) {
String s1 = String.valueOf(chars[j]);
for (int l = 1; l < 3; l++) {
if (j + l < chars.length)
s1 = s1.concat(String.valueOf(chars[j + l]));
}
k++;
if (k == center) {
printerWriter.setAlignCenter();
String right = s1 + " " + stockCode;
int length1 = brandName.length();
if (length1 > 13) {
if (brandName.contains(" ")) {
split = brandName.split(" ");
} else {
split = new String[]{brandName.substring(0, length1 / 2), brandName.substring(length1 / 2, length1)};
}
} else {
brandName = brandName.trim();
for (int l = 0; l < 13 - length1; l++) {
brandName = brandName.concat(" ");
}
printerWriter.print(brandName + right);
printerWriter.printLineFeed();
}
} else {
if (split == null) {
printerWriter.setAlignCenter();
if (lines == k) {
printerWriter.print(s1 + "(" + standardNo + ")");
} else {
printerWriter.print(s1);
}
printerWriter.printLineFeed();
}
}
//英文名字比较长啊......
if (split != null && split.length > 1) {
printerWriter.setAlignLeft();
if (k == center) {
for (int l = 0; l < 13 - split[0].trim().length(); l++) {
split[0] = split[0].concat(" ");
}
printerWriter.print(split[0] + s1 + " " + stockCode);
}
if (k == center + 1) {
for (int l = 0; l < 13 - split[1].trim().length(); l++) {
split[1] = split[1].concat(" ");
}
if (k == lines) {
printerWriter.print(split[1] + s1 + "(" + standardNo + ")");
} else {
printerWriter.print(split[1] + s1);
}
split = null;
}
printerWriter.printLineFeed();
}
}
printerWriter.setAlignCenter();
printerWriter.printLineFeed();
}
printerWriter.print("--------------------------------");
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.print("质检时间:" + receiptsInfoMapBean.operateTime);
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.print("质检员:" + receiptsInfoMapBean.operateAdminName);
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.print("衣物会经过16道清洗消毒工序,让您轻松无忧享受时尚!");
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
printerWriter.print("扫码观看衣二三清洗流程");
printerWriter.printLineFeed();
data.add(printerWriter.getDataAndReset());
ArrayList imageByte = printerWriter.getImageByte(this.getResources(), R.drawable.distributetick);
data.addAll(imageByte);
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.setAlignCenter();
data.add(printerWriter.getDataAndReset());
printerWriter.setAlignCenter();
printerWriter.print("客服热线:400-650-4580");
printerWriter.printLineFeed();
printerWriter.print("微信公众号:衣二三");
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.printLineFeed();
printerWriter.feedPaperCutPartial();
data.add(printerWriter.getDataAndReset());
} catch (IOException e) {
e.printStackTrace();
}
byteArrayOutputStream = new ByteArrayOutputStream();
for (byte[] bytes1 : data) {
try {
byteArrayOutputStream.write(bytes1);
byteArrayOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
boolean printSuccess = false;
printSuccess = AiBaoPrint.getInstance().sendDataPrint(byteArrayOutputStream.toByteArray());
byteArrayOutputStream.close();
if (printSuccess) {
ToastUtil.showShort("打印成功");
return true;
} else {
ToastUtil.showShort("打印失败");
return false;
}
} catch (IOException e) {
e.printStackTrace();
return false;
}