Почему я могу печатать ШТРИХ-код EAN13, но не ITF штрих-кода, используя байты в моем приложении для Android / JAVA?

#java #android #thermal-printer #escpos

#java #Android #термопринтер #escpos

Вопрос:

У меня есть термопечать, которая отлично работает, когда я пытаюсь напечатать штрих-код формата EAN13, это мой код:

 mmOutputStream.write(PrinterCommandsOfi.HW_INIT);

String code = "3226041809";// entradaObj.getEan13();

// Align Bar Code()
mmOutputStream.write(TXT_ALIGN_CT);
mmOutputStream.write(BARCODE_HEIGHT);
mmOutputStream.write(BARCODE_WIDTH);
mmOutputStream.write(BARCODE_FONT_B);
mmOutputStream.write(BARCODE_TXT_BLW);
mmOutputStream.write(BARCODE_ITF);
// mmOutputStream.write(BARCODE_EAN13);
mmOutputStream.write(code.getBytes());
mmOutputStream.write(CTL_LF);

byte[] arrayOfByte1 = { 27, 33, 0 };
byte[] format = { 27, 33, 0 };

mmOutputStream.write(format);
mmOutputStream.write(TXT_ALIGN_CT);
 

Я могу печатать с моей прокомментированной строкой с помощью EAN13 просто отлично, но когда я пытаюсь печатать с помощью ITF (чередование 2 из 5), я ничего не получаю, что я делаю не так?

Это мой вспомогательный командный класс для печати:

 // Barcode format
public static final byte[] BARCODE_TXT_OFF = {0x1d,0x48,0x00}; // HRI printBarcode chars OFF
public static final byte[] BARCODE_TXT_ABV = {0x1d,0x48,0x01}; // HRI printBarcode chars above
public static final byte[] BARCODE_TXT_BLW = {0x1d,0x48,0x02}; // HRI printBarcode chars below
public static final byte[] BARCODE_TXT_BTH = {0x1d,0x48,0x03}; // HRI printBarcode chars both above and below
public static final byte[] BARCODE_FONT_A  = {0x1d,0x66,0x00}; // Font type A for HRI printBarcode chars
public static final byte[] BARCODE_FONT_B  = {0x1d,0x66,0x01}; // Font type B for HRI printBarcode chars
public static final byte[] BARCODE_HEIGHT  = {0x1d,0x68,0x64}; // Barcode Height [1-255]
public static final byte[] BARCODE_WIDTH   = {0x1d,0x77,0x03}; // Barcode Width  [2-6]
public static final byte[] BARCODE_UPC_A   = {0x1d,0x6b,0x00}; // Barcode type UPC-A
public static final byte[] BARCODE_UPC_E   = {0x1d,0x6b,0x01}; // Barcode type UPC-E
public static final byte[] BARCODE_EAN13   = {0x1d,0x6b,0x02}; // Barcode type EAN13
public static final byte[] BARCODE_EAN8    = {0x1d,0x6b,0x03}; // Barcode type EAN8
public static final byte[] BARCODE_CODE39  = {0x1d,0x6b,0x04}; // Barcode type CODE39
public static final byte[] BARCODE_ITF     = {0x1d,0x6b,0x05}; // Barcode type ITF
public static final byte[] BARCODE_NW7     = {0x1d,0x6b,0x06}; // Barcode type NW7
 

и это ссылка из хорошего руководства по ESC / POS для термопринтеров:

https://www.sparkag.com.br/wp-content/uploads/2016/06/ESC_POS-AK912-English-Command-Specifications-V1.4.pdf

Комментарии:

1. Глядя на руководство в формате pdf, можете ли вы проверить, сколько цифр в ваших данных, поскольку ITF, похоже, требует нечетного числа.

2. Я пытаюсь напечатать этот номер 3226041809

3. Вероятно, будут две ошибки. Во-первых, вы не установили информацию о длине штрих-кода (обозначенную nL в документе). Во-вторых, данные штрих-кода ITF должны содержать нечетные цифры, но вы указали четные цифры. Согласно документации, этот принтер всегда печатает штрих-код ITF как имеющий контрольную цифру. Похоже, что приложению необходимо указать данные с нечетными цифрами, которые не включают контрольную цифру, поскольку контрольная цифра автоматически вычисляется и добавляется принтером.

4. @kunif можешь привести пример для меня?

5. Данные штрих-кода, представленные в исходном коде, не являются EAN13 заголовка или вопроса, поэтому, если вы действительно хотите распечатать EAN13, используйте правильный код EAN13. Затем вставьте данные, представляющие длину данных в 1 байт между .write(BARCODE_ITF); и .write(code.getBytes()); . Вероятно, вы можете печатать с его помощью. Пожалуйста, попробуйте. И это также необходимо для стороны, которая считывает штрих-код, чтобы ответить. Возможно, вам потребуется настроить сканер штрих-кода так, чтобы он не уведомлял вас о контрольной цифре ITF, или пусть он уведомляет вас, включая контрольную цифру, чтобы ваше приложение удалило последнюю цифру.