使用Brother QL-720NW打印位图二维码仅出空白标签的解决问询
Brother QL-720NW打印二维码空白问题修复方案
问题背景
使用Brother QL-720NW标签打印机打印二维码位图时,已成功生成并在ImageView中正常显示二维码,但连接打印机后仅打印空白标签,打印机连接状态正常。
排查方向及修复步骤
1. 适配位图尺寸与标签纸规格
QL-720NW的W62RB标签宽度为62mm,对应打印机300DPI分辨率下约730像素(计算:62mm ÷ 25.4mm/英寸 × 300DPI ≈ 732像素)。原代码生成100×100的小尺寸位图,可能因缩放比例或位置偏移导致无法在标签上正常显示。
2. 修正位图颜色格式
原代码使用ARGB_8888格式,可能包含透明通道,部分标签打印机对带透明通道的位图兼容性差。建议改用无透明通道的RGB_565格式,并确保二维码仅包含纯黑、纯白两色。
3. 确认打印参数与实际标签匹配
- 确保
labelNameIndex对应正确的标签型号:LabelInfo.QL700.W62RB.ordinal()需准确匹配62mm圆形标签; - 取消注释
paperSize设置,明确指定纸张类型,避免参数冲突; - 检查打印方向(
orientation):二维码为正方形,若设置为LANDSCAPE可能导致显示异常,可尝试改为PORTRAIT或根据标签方向调整。
4. 确保存储权限正常
打印机需要通过workPath临时存储打印文件,需确保APP已获取WRITE_EXTERNAL_STORAGE权限(Android 10及以上需适配Scoped Storage)。
修改后的代码示例
生成二维码位图方法
Bitmap encodeAsBitmap(String str) throws WriterException { // 适配62mm标签的二维码尺寸(300DPI下约730像素) int qrTargetSize = 730; QRCodeWriter writer = new QRCodeWriter(); BitMatrix bitMatrix = writer.encode(str, BarcodeFormat.QR_CODE, qrTargetSize, qrTargetSize); int width = bitMatrix.getWidth(); int height = bitMatrix.getHeight(); int[] pixels = new int[width * height]; // 生成纯黑纯白像素,无透明通道 for (int y = 0; y < height; y++) { int rowOffset = y * width; for (int x = 0; x < width; x++) { pixels[rowOffset + x] = bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE; } } // 使用RGB_565格式避免透明通道问题 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }
打印方法
void printImage(Bitmap bitmap) { final Printer printer = new Printer(); PrinterInfo settings = printer.getPrinterInfo(); settings.ipAddress = "192.168.2.149"; settings.workPath = "/storage/emulated/0/Download"; settings.printerModel = PrinterInfo.Model.QL_720NW; settings.port = PrinterInfo.Port.NET; // 正方形二维码建议使用PORTRAIT方向,或根据标签实际需求调整 settings.orientation = PrinterInfo.Orientation.PORTRAIT; // 明确指定纸张类型与标签型号匹配 settings.paperSize = PrinterInfo.PaperSize.CUSTOM; settings.align = PrinterInfo.Align.CENTER; settings.valign = PrinterInfo.VAlign.MIDDLE; settings.printMode = PrinterInfo.PrintMode.ORIGINAL; settings.numberOfCopies = 1; settings.labelNameIndex = LabelInfo.QL700.W62RB.ordinal(); settings.isAutoCut = true; settings.isCutAtEnd = false; printer.setPrinterInfo(settings); new Thread(new Runnable() { @Override public void run() { if (printer.startCommunication()) { Log.e("Tag: ", "Connection made."); // 若打印方向为LANDSCAPE,可在此旋转位图适配 // Matrix matrix = new Matrix(); // matrix.postRotate(90); // Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); PrinterStatus result = printer.printImage(bitmap); Log.e("Tag: ", "Printing!"); if (result.errorCode != PrinterInfo.ErrorCode.ERROR_NONE) { Log.d("TAG", "ERROR - " + result.errorCode); } printer.endCommunication(); } else { Log.e("Tag: ", "Cannot make a connection."); } } }).start(); }
验证建议
- 打印前将生成的位图保存到本地,检查是否为清晰的黑白二维码;
- 查看打印机返回的
errorCode,根据错误码定位问题(如ERROR_PAPER_SIZE_MISMATCH表示纸张参数不匹配); - 使用Brother官方打印工具测试打印相同位图,确认打印机硬件正常。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

