当前位置: 首页 > 面试题库 >

如何从Android的热敏打印机打印?

孔驰
2023-03-14
问题内容

我正在为具有内置行式打印机的Android设备开发应用程序。我必须与此打印机进行交互,并使用它来打印收据上的详细信息,然后使用裁纸器自动剪切该收据。我已经在其中看到了一些ESC命令,但是我不知道如何执行这些ESC命令。

关于Casio设备打印机,我有三个主要问题:

1.我已经使用了内置打印机的打印代码,但是打印后切纸刀没有激活

BuildinEx840 ex840 = new BuildinEx840();
int response = ex840.open();
System.out.println("ex840 open:" + response);

byte[] set = {
    'N', 'A', 'R', 'E', 'S', 'H', 'S', 'H', 'A', 'R', 'M', 'A', (byte) 0x0d, (byte) 0x0a
};

try {

    ex840.write(set);

} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {

    response = ex840.getEndStatus();
    System.out.println("getEndStatus:" + response);
    response = ex840.initCutter();
    ex840.close();    
    System.out.println("initCutter:" + response);

} catch (Exception e) {         
    e.printStackTrace();         
}

2.我不知道如何在android中将ESC命令发送到打印机

有一些命令如下

ESC FF DataPrint,
[code]  <1B>H<OC>H,
[Function] Print all the data in the print area collectively.

我们如何通过编程在android中执行这些ESC命令?

3. 我不知道如何以要求的格式打印收据

有一些ESC命令可用于从左右两侧提供边距,还有一些其他命令。因此,我该如何以某种格式打印数据,并可以更改文本的大小以及要打印的文本的其他设置。

任何帮助表示赞赏。


问题答案:

工作了7天后,我得到了正确的方法来获取打印件,然后用裁纸器裁切该收据。ESC命令对于获取打印以及与打印机有关的其他任务非常重要。我们必须将这些ESC
CMD以字节数组的形式传递给行式打印机。

有一些命令如下

ESC FF DataPrint,
[code]  <1B>H<OC>H,
[Function] Print all the data in the print area collectively.

因此,只需创建此命令的字节数组,然后将其传递给打印机即可。

e.g. byte[] print = {0x1b,0x0c};

现在将其传递给打印机。必须有一些方法,如getCmd()或writeCmd()等,具体取决于打印机。

我们如何通过编程在android中执行这些ESC命令?下面是执行此操作的代码

    BuildinEx840 lpd=new BuildinEx840();
            lpd.setMulticharMode(LinePrinterDeviceBase.CHARACTERSET_USA);
//initialise Cutter
            lpd.initCutter();
            LinePrinter lp=new LinePrinter();
            lp.open(lpd);
            lpd.open();
            try{
                lpd.init();
            }catch(IOException e){
                e.printStackTrace();
            }
            for(int i=0; i<5;i++){
                lp.printNormal("Testing the Line Printer");
            }
            int totalLinefeed=listofItemList.size();
//ESC CMD for line feeds
            byte[] lfs=new byte[]{0x1B,'d', 5};
            sendtoExprinter(lpd,lfs);
//ESC CMD for paper cut
            lfs=new byte[]{0x1B,'i'};
            sendtoExprinter(lpd, lfs);

private void sendtoExprinter(BuildinEx840 dev, byte[] instr) {
        try{
            dev.write(instr);
        }catch(IOException e){
            e.printStackTrace();
        }

    }

更新: 通过热敏打印机打印图像

在某些打印机中,您可以在打印机的非易失性存储器中定义图像,然后通过 ESC cmd 1C 70 01 30
从那里打印图像。在其他一些打印机中,您可以在通过热敏打印机打印图像时给出图像的直接路径。

在任何行式打印机中,我们都必须通过此打印机传递ESC CMDObj.write(command);
方式。我要感谢SO社区,也要特别感谢TheBlastOne,他为我提供了正确的指导。

如果有人在集成热敏打印机方面遇到任何问题,请随时询问。



 类似资料:
  • 编辑:所以在一天的混乱之后。我的问题是spintf。我最初认为我的循环是错误的。

  • 有没有办法让我在蓝牙热敏打印机上打印收据,因为我真的很难在Flutter上找到解决方案?任何事情都能帮上忙,我真的很感谢你的回答

  • 我想打印令牌号码从我的android应用程序使用WiFi或蓝牙。我已经实现了PrintManager API,但问题是点击print后,它要求从打印机列表中选择打印机。我的要求是,一旦我选择或配置打印机与应用程序,它不应该要求再次选择打印机。我的问题如下- 使用PrintManager API是否可能? 我准备使用热敏打印机。哪家厂商提供热敏打印机SDK或示例代码?

  • 我必须用热敏打印机打印发票收据。我用Zjiang热敏打印机打印收据。他们还提供了手册和演示项目。在演示项目中,他们使用一个库“btsdk.jar”来实现连接和打印。 我已经成功地建立了打印机和android设备之间的连接。但是没有关于文本对齐(中心、左、右)&单元格宽度、高度的指导原则。 我试过了。它只通过改变format2变量来改变文本高度。 打印信息- 发票收据

  • 我必须使用Java通过热敏打印机打印收据。我已经完成了所有工作。我的程序从数据库中获取数据,并使用特殊字符、制表符和\n转换为一个字符串。然后将字符串传递给另一个将其转换为图形的方法。 问题是当我点击打印按钮时,白纸就出来了。我注意到我的字符串的前4-5个字符被打印在纸币最末端右上角的最后一行。我的打印机是爱普生TM-T81。 打印账单的方法是: 问题是什么?我该如何解决?我认为我没有在drawS

  • 我有一台爱普生热敏打印机,现在我要打印一些足够长的收据,我使用爱普生提供的代码样本。代码如下所示,现在的问题是,当收据超过一定长度(约30cm)时,打印机会停止并剪切收据,如下图所示。我如何打印长收据没有自动剪切。