java - 如何从 Android 中的热敏打印机打印?

标签 java android escaping point-of-sale thermal-printer

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

我有关于卡西欧设备打印机的三个主要问题:

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();
        }

    }

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

在某些打印机中,您可以在打印机的非 volatile 内存中定义图像,然后通过 ESC cmd 1C 70 01 30 从那里打印图像。在其他一些打印机中,您可以在通过热敏打印机打印图像时提供图像的直接路径。

在任何行式打印机中,我们必须通过 printerObj.write(command); 方式传递 ESC CMD。我要感谢 SO 社区,特别感谢 TheBlastOne 引导我走上正确的道路。

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

关于java - 如何从 Android 中的热敏打印机打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701465/

相关文章:

android - 如何在 Android Studio 编写的项目中使用自定义字体

java - PatternSyntaxException 尝试按 },{ 拆分时出现

JavaScript JSON 转义安全

java - 类型 SocketFactory 已弃用

java - 在没有 resource-ref 定义的情况下查找 jndi 资源

Android 发行版构建工作不正常。开发构建工作正常

包含反斜杠的多行字符串的 Python 3.5 分割线

java - 我试图将一个 servlet 调用到另一个 servlet,但无法调用 servlet

java - java中如何获取不带空格的输入?

android - 为什么Project的build.gradle没有显示?