ESC / POS длинный штрих-код строки не сканируется - PullRequest
0 голосов
/ 05 марта 2019

Я работаю на китайском термопринтере Bluetooth Model:SCAN-X, Проблема в том, что штрих-коды для длинных строк не сканируются:

  • 0123456789 - напечатано и сканируется
  • abcdefghijklmno - печатается и не сканируется
  • INV-1-48 - печатается и сканируется
  • INW-0001-0000000047 --- печатается и не сканируется
  • INW-001-0123456789 ---напечатано и сканируется
  • INW-0001-123456789 --- напечатано и не сканируется

Здесь указано руководство в документе ESC / POS принтера scan-x-barcode-doc

Я немного запутался, что-то не так с моим кодом?

private void printBarcodeTest() {
        OutputStream out = null;
        try {
            if ((socket == null) || (!socket.isConnected())) {
                socket = BluetoothUtil.getSocket(mBluetoothPrinterDevice);
            }
            out = socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

//        String barcodeContent1 = "INW-1-47"; // this is printing fine
        String barcodeContent1 = "INW-0001-0000000047"; // this is printing, but not readable by barcode scanner


        byte[] format = new byte[]{
                0x1D,                          // GS
                0x6B,                           // k
                (byte) 73,                        // m (2) this is CODE_128
                (byte) barcodeContent1.length()   // n (number of barcode data bytes)
        };

        byte[] data = ESCUtil.byteMerger(new byte[][]{
                format,
                barcodeContent1.getBytes(StandardCharsets.UTF_8) //d1...dn
        });

        if (out != null) {
            // init printer
            //                              ESC  , @
            writeOutStream(out, new byte[]{0x1B, 0x40});
//                    // left margin
//                    //                             GS   , L     , nL            , nH
//                    writeOutStream(out,new byte[]{ 0x1D , 0x4C ,(byte) (0 % 256),(byte) (0 / 256)});
            // set alignment to center
            //                            ESC   ,a     ,  n
            writeOutStream(out, new byte[]{0x1B, 0x61, (byte) 1});
            // set HRI position
            //                              GS ,  !    ,  n
            writeOutStream(out, new byte[]{0x1D, 0x48, (byte) 2});
            // set height
            //                              GS , h    ,  n
            writeOutStream(out, new byte[]{0x1D, 0x68, (byte) 2});
            // set width
            //                             GS  ,  w   ,  n
            writeOutStream(out, new byte[]{0x1D, 0x77, (byte) 16);
            // set data to print
            writeOutStream(out, data);
            // set next line feed
            //                             LF
            writeOutStream(out, new byte[]{0x0A});
            // print n dots in feed
            //                           ESC   , J    , n
            writeOutStream(out, new byte[]{0x1B, 0x4A, (byte) 160});
        }

        try {
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Вывод:

Scan-X_output

Может кто-нибудь взглянуть и направить меня?

1 Ответ

0 голосов
/ 06 марта 2019

Хорошо, это не тихие зоны, ограничивающие рамки или программное обеспечение.Проблема с печатающей головкой.Между барами слишком много крови.Если вы распечатаете 100 кодов '... 0047', возможно, их отсканируется небольшая часть.

Ваша печатающая головка (термическая, я думаю?) Недостаточно охлаждается между планками, чтобы оставитьпробелы.Это может быть связано с тем, что бумага слишком чувствительна к нагреву, это может быть из-за того, что печатающая головка не рассчитана на такое узкое расстояние, или это может быть плохая печатающая головка.Вот некоторые вещи, которые вы можете попробовать:

  1. Другой принтер, если таковой имеется, может помочь вам изолировать неисправный принтер.
  2. Увеличение ширины штрих-кода примерно на 50%, увеличивая пространство между барами.Попробуйте "writeOutStream (out, new byte [] {0x1D, 0x77, (byte) 24 );"
  3. Используйте код 128C для большой числовой части справа.Я не уверен, как переключиться на Code 128C с Code 128B с помощью этой настройки, но он может сократить весь символ штрих-кода на 4 символа.
...