Android连接USB打印机

项目中需要用到android设备通过USB连接热敏打印机打印图文混排的小条,总结一下。

外部主要是用这个方法来打印:

    /**
     * 打印核验小条
     * 子线程中运行
     */
    private static int times = 0;
    public void printVerifyData(String tmpName,
                                String tmpIdNo,
                                String curName,
                                String idcardNo,
                                String headerPic) {

        while(!isConnect){
            isConnect = doConnect();
            times ++ ;
            Log.d("lixm","isConnect = " + isConnect + ", times = " + times);
            if(times >= TRY_COUNT){
                // todo send error
                sendPrintError();
                return;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        ArrayList<byte[]> data = new ArrayList<>(); // 用于装载打印数据
        try {
            PrinterWriter printer = new PrinterWriter58mm();
            // printer.init();  // 初始化打印机

            printer.setAlignCenter();
            data.add(printer.getDataAndReset());
            // 打印标题
            printer.setEmphasizedOn();
            printer.setFontSize(1);
            printer.print(Const.VALUE.TITLE);
            printer.printLineFeed();
            printer.setFontSize(0);
            printer.setEmphasizedOff();
            // 打印虚线
            printer.setAlignCenter();
            printer.printDottedLine();
            printer.printLineFeed();

            data.add(printer.getDataAndReset());

            // 打印了一个图片
            printer.setAlignCenter();
            ArrayList<byte[]> image1 = printer.getImageByte(headerPic);

            if(image1 == null || image1.size() == 0){
                ToastUtils.showShort("照片转换异常,请重新打印!");
                sendPrintError();
                return;
            }
            data.addAll(image1);

            // 打印虚线
            printer.printDottedLine();
            printer.printLineFeed();  // 输出并换行

            printer.setLineHeight(80);   // 设置行间距
            printer.setEmphasizedOn();
            printer.printInOneLine("姓名:", tmpName, 0);
            printer.printLineFeed();
            printer.printInOneLine("身份证号码:", tmpIdNo, 0);
            printer.printLineFeed();
            printer.printInOneLine("凭证有效期:", TimeUtils.date2String(new Date(),new SimpleDateFormat("yyyy年MM月dd日")), 0);
            printer.printLineFeed();
            printer.setEmphasizedOff();

            // 打印虚线
            printer.setAlignCenter();
            printer.printDottedLine();
            printer.printLineFeed();  // 输出并换行
            data.add(printer.getDataAndReset());

            // todo 这里打印二维码
            String oriString = curName+"|" +idcardNo;
            String qrString = Base64.encodeToString(oriString.getBytes("UTF-8"),Base64.NO_WRAP);
            Log.d("lixm","qrString = " + qrString);
            Bitmap qrCodeImage = QRCodeUtil.createQRCodeBitmap(qrString, 300, "0");
            //byte[] qrData = PrinterUtils.decodeBitmap(qrCodeImage);
            ArrayList<byte[]> qrData = printer.getImageByte(qrCodeImage);
            data.addAll(qrData);

            // 打印虚线
            printer.setAlignCenter();
            printer.printDottedLine();
            printer.printLineFeed();  // 输出并换行

            printer.setAlignLeft();
            printer.setEmphasizedOn();
            String tips1 = "     提示:凭二维码扫码进站,仅限本人使用,"+ "\n";
            String tips2 = "     如遇遗失请重新补打凭证"+"\n";
            printer.print(tips1);
            printer.print(tips2);
            printer.setEmphasizedOff();

            printer.printLineFeed();
            printer.printLineFeed();

            printer.feedPaperCutPartial();  // 切纸
            data.add(printer.getDataAndClose());

            boolean isPrintResult = printTest(data);  // 打印数据
            //printer.close();
            //printer = null;
            if(isPrintResult){
                BusEvent busEvent = new BusEvent();
                busEvent.action = "printer_completed";
                busEvent.data = "ok";
                EventBus.getDefault().post(busEvent);
            }else{
                sendPrintError();
            }
        } catch (IOException e) {
            LogUtils.file(e.getCause() + "--" + e.getMessage());
            sendPrintError();
        }
    }

完整代码请点击这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值