Android 设备接入小票打印机 爱宝小票打印机

实现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<byte[]> 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<byte[]> 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;
}

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值