#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 для термопринтеров:
Комментарии:
1. Глядя на руководство в формате pdf, можете ли вы проверить, сколько цифр в ваших данных, поскольку ITF, похоже, требует нечетного числа.
2. Я пытаюсь напечатать этот номер 3226041809
3. Вероятно, будут две ошибки. Во-первых, вы не установили информацию о длине штрих-кода (обозначенную nL в документе). Во-вторых, данные штрих-кода ITF должны содержать нечетные цифры, но вы указали четные цифры. Согласно документации, этот принтер всегда печатает штрих-код ITF как имеющий контрольную цифру. Похоже, что приложению необходимо указать данные с нечетными цифрами, которые не включают контрольную цифру, поскольку контрольная цифра автоматически вычисляется и добавляется принтером.
4. @kunif можешь привести пример для меня?
5. Данные штрих-кода, представленные в исходном коде, не являются EAN13 заголовка или вопроса, поэтому, если вы действительно хотите распечатать EAN13, используйте правильный код EAN13. Затем вставьте данные, представляющие длину данных в 1 байт между
.write(BARCODE_ITF);
и.write(code.getBytes());
. Вероятно, вы можете печатать с его помощью. Пожалуйста, попробуйте. И это также необходимо для стороны, которая считывает штрих-код, чтобы ответить. Возможно, вам потребуется настроить сканер штрих-кода так, чтобы он не уведомлял вас о контрольной цифре ITF, или пусть он уведомляет вас, включая контрольную цифру, чтобы ваше приложение удалило последнюю цифру.