【问题标题】:Android POS Printer ESC/POSAndroid POS 打印机 ESC/POS
【发布时间】:2014-12-14 01:58:10
【问题描述】:

所以我一直在为蓝牙打印机编写一个 Android 应用程序,我意识到这实际上是 ESC/POS 标准:http://nicholas.piasecki.name/blog/wp-content/uploads/2009/12/ESC-POS-Command-Guide.pdf

现在我用于打印机的文档是这些命令的一个有限子集,可以在此处找到:https://dl.dropboxusercontent.com/u/88265006/%E4%BA%A7%E5%93%81/Printer's%20user%20manual/SP-MP-300-Technical%20Manual.pdf

        private void initPrinter() {
            byte[] init = new byte[2];
            init[0] = 0x1B;
            init[1] = 0x40;
            mService.write(init);
        }

        private void printText(String message){
            byte[] send;
            try{
                send = message.getBytes("UTF8");
            }
            catch(UnsupportedEncodingException e){
                send = "Error".getBytes();
            }
            initPrinter();
            mService.write(send);
        }

我可以连接到打印机,使用“ESC @”命令对其进行初始化,并且可以使用上述命令进行写入,但我似乎无法获得任何类型的条形码的任何“视觉”效果。这是我对一维 EAN13 代码 (0000000000000) 的尝试:

        byte[] height = new byte[3];
        height[0] = 0x1D;
        height[1] = 0x68;
        height[2] = (byte)30;
        //height[3] = 0;

        byte[] width = new byte[3];
        width[0] = 0x1D;
        width[1] = 0x77;
        width[2] = (byte)3;

        byte[] textPos = new byte[3];
        textPos[0] = 0x1D;
        textPos[1] = 0x48;
        textPos[2] = (byte)2;

        byte[] level = new byte[3];
        level[0] = 0x1D;
        level[1] = 0x51;
        level[2] = (byte)32;

        byte[] code = new byte[18];
        code[0] = 0x1D;
        code[1] = 0x6B;
        code[2] = 0x02;
        code[3] = 0x0D;
        code[4] = 0x30;//1
        code[5] = 0x30;//2
        code[6] = 0x30;//3
        code[7] = 0x30;//4
        code[8] = 0x30;//5
        code[9] = 0x30;//6
        code[10] = 0x30;//7
        code[11] = 0x30;//8
        code[12] = 0x30;//9
        code[13] = 0x30;//10
        code[14] = 0x30;//11
        code[15] = 0x30;//12
        code[16] = 0x30;//13

        code[17] = 0x00;//end
        mService.write(height);
        mService.write(width);
        mService.write(textPos);
        mService.write(level);
        mService.write(code);

mService 实际写入数据的位置。我得到的最佳输出是 0█0█0█0█0█0█0█0█0█0█0█0█0█0█ - 在连续多次发送数据之后。

如果我在多次发送后删除最后一个结束字节,我会得到 14 个 0,我还尝试将结束 0 添加到高度、宽度、textPosition 和级别数组,没有任何影响。

我还查看了以下地方: http://www.manualslib.com/manual/689542/Axiohm-A795.html?page=91
http://pyramidacceptors.com/phoenix-printer/esc-pos-command-set/
http://www.vbforums.com/showthread.php?754493-RESOLVED-Printing-Barcode-with-ESC-POS-on-Epson-Printers
http://www.manualslib.com/manual/753647/Axiohm-A630.html?page=51
https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf
Where can I find a "ESC/POS" Epson Barcode Test Program?

【问题讨论】:

  • 您确定您的字节转换正确吗? Java有一种奇怪的十六进制到字节(二进制转换)的方式。这可能是导致您的问题的原因。
  • 我最终创建了常量以方便阅读,例如私有静态字节 GS = 0x1d;但是 Java 的字节表示不是问题,但感谢您的帮助:)

标签: android printing bluetooth


【解决方案1】:

好的,事实证明,在 ESC/POS 中,打印机实际上会为您计算一些数据。我不应该将校验字节(实际条形码的最后一位)放入发送到打印的数据中。

当然,我的文档缺少所有 http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf

我仍在处理二维码打印,但我很确定我的问题有些相似。

【讨论】:

  • Tnx 寻求帮助,但你能分享一下工作代码吗?我遇到了同样的问题,删除最后一个数字(代码[17] = 0x00;//end)对我不起作用……也许我还遗漏了其他东西。 :(
  • 您所有的超链接都已损坏。请分享代码
猜你喜欢
  • 1970-01-01
  • 2011-10-06
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2013-06-18
  • 2020-05-07
  • 2020-02-11
  • 2013-07-01
相关资源
最近更新 更多