项目中需要用到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 errorsendPrintError();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();}}