Android设备通过OTG连接TSC TDP-225打印机打印位图失败求助
问题:Android OTG连接TSC TDP-225打印机,PUTBMP打印单色位图失败
我最近在做Android设备通过OTG连接TSC TDP-225打印机打印图片的功能,照着官方文档里的简单位图打印示例来实现,但哪怕是用PUTBMP指令打印单色位图也没法正常工作。下面是相关细节:
官方文档给出的简单位图打印示例
官方示例指令大致如下:
! 0 200 200 300 1 PUTBMP 10 10 "TEST.BMP" PRINT
我的Android端实现代码(核心逻辑)
private void sendPrintCommand(Bitmap bitmap) { try { // 将Bitmap转为单色位图并写入临时文件 File bmpFile = convertToMonochromeBmp(bitmap); // 通过OTG获取打印机连接与输出端点 UsbDeviceConnection connection = usbManager.openDevice(printerDevice); UsbEndpoint endpoint = findBulkOutEndpoint(printerDevice); // 发送初始化指令 String initCmd = "! 0 200 200 300 1\n"; connection.bulkTransfer(endpoint, initCmd.getBytes(), initCmd.getBytes().length, 1000); // 发送PUTBMP指令 String putBmpCmd = String.format("PUTBMP 10 10 \"%s\"\n", bmpFile.getName()); connection.bulkTransfer(endpoint, putBmpCmd.getBytes(), putBmpCmd.getBytes().length, 1000); // 发送打印指令 String printCmd = "PRINT\n"; connection.bulkTransfer(endpoint, printCmd.getBytes(), printCmd.getBytes().length, 1000); } catch (Exception e) { e.printStackTrace(); } } // 单色位图转换方法 private File convertToMonochromeBmp(Bitmap bitmap) throws IOException { File tempFile = File.createTempFile("PRINT", ".BMP", getCacheDir()); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile)); // 灰度转单色处理 Bitmap monochromeBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ALPHA_8); Canvas canvas = new Canvas(monochromeBitmap); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(cm); paint.setColorFilter(filter); canvas.drawBitmap(bitmap, 0, 0, paint); monochromeBitmap.compress(Bitmap.CompressFormat.PNG, 100, bos); // 试过转BMP格式也无效 bos.flush(); bos.close(); return tempFile; }
实际输出情况
- 打印机能正常响应走纸,但纸上完全空白,没有任何图像;
- 调整PUTBMP的坐标、位图尺寸后,结果依然一致;
- 发送
TEXT指令打印文字正常,说明OTG连接和指令通道没问题。
有没有朋友遇到过类似的问题?求指点可能的问题点!
我整理的几个排查方向
之前处理过类似的TSC打印问题,给你几个实用的排查点:
- 位图格式必须严格匹配要求:TSC的PUTBMP指令只认未压缩的1-bit深度BMP位图,你代码里用PNG压缩后改后缀是不行的,得生成标准的1-bit未压缩BMP文件。可以找专门的BMP生成工具类处理,确保文件头和像素数据完全符合打印机要求。
- PUTBMP的文件路径理解错误:这是绝大多数人踩的坑!OTG连接下,打印机根本访问不到Android设备的本地文件!PUTBMP里的文件名指的是打印机内存中的文件,你需要先通过
DOWNLOAD指令把位图数据上传到打印机内存,再用PUTBMP引用这个内存文件名。正确流程应该是:// 1. 上传位图到打印机内存 DOWNLOAD "TEST.BMP" [位图二进制数据] // 2. 执行打印指令 ! 0 200 200 300 1 PUTBMP 10 10 "TEST.BMP" PRINT - 指令换行符和编码问题:TSC打印机通常要求用
\r\n作为指令结束符,而不是单一的\n,你可以把代码里所有换行改成\r\n试试。 - 位图尺寸超出打印机范围:TDP-225的最大打印宽度在203dpi下约为640像素,要是你的位图宽度超过这个值,可能会被截断或不打印,先拿个小尺寸的单色位图测试。
优先试试第2点,这是最容易忽略的核心问题!
内容的提问来源于stack exchange,提问作者Виктор Викторов
相关产品推荐
相关产品推荐

