You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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打印问题,给你几个实用的排查点:

  1. 位图格式必须严格匹配要求:TSC的PUTBMP指令只认未压缩的1-bit深度BMP位图,你代码里用PNG压缩后改后缀是不行的,得生成标准的1-bit未压缩BMP文件。可以找专门的BMP生成工具类处理,确保文件头和像素数据完全符合打印机要求。
  2. PUTBMP的文件路径理解错误:这是绝大多数人踩的坑!OTG连接下,打印机根本访问不到Android设备的本地文件!PUTBMP里的文件名指的是打印机内存中的文件,你需要先通过DOWNLOAD指令把位图数据上传到打印机内存,再用PUTBMP引用这个内存文件名。正确流程应该是:
    // 1. 上传位图到打印机内存
    DOWNLOAD "TEST.BMP" [位图二进制数据]
    // 2. 执行打印指令
    ! 0 200 200 300 1
    PUTBMP 10 10 "TEST.BMP"
    PRINT
    
  3. 指令换行符和编码问题:TSC打印机通常要求用\r\n作为指令结束符,而不是单一的\n,你可以把代码里所有换行改成\r\n试试。
  4. 位图尺寸超出打印机范围:TDP-225的最大打印宽度在203dpi下约为640像素,要是你的位图宽度超过这个值,可能会被截断或不打印,先拿个小尺寸的单色位图测试。

优先试试第2点,这是最容易忽略的核心问题!


内容的提问来源于stack exchange,提问作者Виктор Викторов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:56:50