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

Android应用集成Printooth打印出纸无内容问题求助

解决Printooth库打印仅出空白纸的问题

我来帮你一步步排查这个问题,结合你的代码来看,可能有几个关键点需要调整:


1. 修正打印对象初始化的逻辑问题

你的initPrinting方法里的判断逻辑写反了!当配对成功后,你应该获取打印机实例,而不是在未配对时获取。原代码中:

private void initPrinting() {
    if (!Printooth.INSTANCE.hasPairedPrinter())
        printing = Printooth.INSTANCE.printer();
    if (printing != null) printing.setPrintingCallback(this);
}

改成:

private void initPrinting() {
    if (Printooth.INSTANCE.hasPairedPrinter())
        printing = Printooth.INSTANCE.printer();
    if (printing != null) printing.setPrintingCallback(this);
}

这个错误可能导致配对后printing对象还是空值,虽然看起来能触发打印,但实际没有正确发送数据到打印机。

2. 调整打印指令顺序与初始化

你开头添加的Raw指令new byte[]{27, 100, 4}是打印并走纸4行的指令,这会导致打印机先空走纸,后面的文本可能因为指令顺序问题没有被正确解析。建议先添加打印机初始化指令,再打印文本:

private void printText() {
    ArrayList<Printable> printables = new ArrayList<>();
    // 先发送打印机初始化指令(ESC @),重置打印机状态
    printables.add(new RawPrintable.Builder(new byte[]{27, 64}).build());
    // 简化文本打印,先测试基础输出
    printables.add(new TextPrintable.Builder()
            .setText("Hello World: Test Print")
            .setNewLinesAfter(2)
            .build());
    // 最后添加走纸指令(可选)
    printables.add(new RawPrintable.Builder(new byte[]{27, 100, 3}).build());
    printing.print(printables);
}

3. 检查字符编码兼容性

很多小票打印机默认不支持PC1252编码,建议换成UTF-8或者打印机原生支持的编码(比如CP850),或者直接去掉字符编码参数使用默认值:

printables.add(new TextPrintable.Builder()
        .setText("Hello World: Jagadeesh")
        // 换成UTF-8编码
        .setCharacterCode(DefaultPrinter.Companion.getCHARCODE_UTF_8())
        .setNewLinesAfter(1)
        .build());

4. 确认蓝牙权限配置

确保你的AndroidManifest.xml里添加了必要的蓝牙权限,尤其是Android 6.0+和12+的权限:

<!-- 基础蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 安卓6.0+扫描蓝牙需要位置权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 安卓12+新增权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

并且在代码中添加运行时权限请求,确保应用能正常访问蓝牙设备。

5. 简化打印内容排查

先去掉所有复杂格式(加粗、下划线、居中),只打印纯文本,确认打印机能输出内容后,再逐步添加格式设置。有些打印机对复杂格式的支持有限,可能导致文本无法解析。


按照上面的步骤调整后,应该能解决空白纸的问题。如果还是不行,可以检查打印机是否支持ESC/POS指令集(Printooth主要针对这类打印机),或者尝试更换其他测试打印机。

内容的提问来源于stack exchange,提问作者Nicola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:40:20