Как я могу генерировать qr-код с помощью ESC POS?

#c# #thermal-printer #escpos

#c# #термопринтер #escpos

Вопрос:

Я разрабатываю печать QR-кода с помощью команд ESC / POS. Однако я не могу сгенерировать qr-код, содержащий более 127 символов.

Следует коду на C # :

    string ESC = Convert.ToString((char)27);
    
   string GS = Convert.ToString((char)29);
    
   string center = ESC   "a"   (char)1; //align center
    
   string left = ESC   "a"   (char)0; //align left
    
   string bold_on = ESC   "E"   (char)1; //turn on bold mode
    
   string bold_off = ESC   "E"   (char)0; //turn off bold mode
    
   string cut = ESC   "d"   (char)1   GS   "V"   (char)66;

   string initp = ESC   (char)64; //initialize printer

   string buffer = ""; //store all the data that want to be printed
   string QrData = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; //data to be print in QR code

   Encoding m_encoding = Encoding.GetEncoding("iso-8859-1"); //set encoding for QRCode
   int store_len = (QrData).Length   3;
   byte store_pL = (byte)(store_len % 256);
   byte store_pH = (byte)(store_len / 256);

   buffer  = initp; //initialize printer
   buffer  = m_encoding.GetString(new byte[] { 29, 40, 107, 4, 0, 49, 65, 50, 0 });
   buffer  = m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 67, 8 });
   buffer  = m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 69, 48 });
   buffer  = m_encoding.GetString(new byte[] { 29, 40, 107, store_pL, store_pH, 49, 80, 48 });
   buffer  = QrData;
   buffer  = m_encoding.GetString(new byte[] { 29, 40, 107, 3, 0, 49, 81, 48 });
   buffer  = cut   initp;
  

чтобы сгенерировать строку qrcode, я записываю строку в файл и распечатываю ее.

Ответ №1:

Это потому, что он использует строковые переменные.

Даже если вы укажете кодировку, не всегда возможно преобразовать символьные данные со значением 0x80 или выше в правильное значение байта.

Если вы используете только массив байтов, вы можете использовать длинные данные.


Не все можно рассматривать как текст, закодированный на одной кодовой странице.

Это связано с тем, что команды, которые включают управляющие коды, такие как печать штрих-кода, с большой вероятностью содержат данные, которые нельзя обрабатывать как текст строки символов.

Однако печать текста и штрих-кода может быть смешанной. Текстовые данные могут быть записаны в файл в виде закодированных двоичных данных (не в виде строки).

Если есть другая программа, которая считывает данные из файла и записывает их на принтер, эта программа должна открыть файл как двоичный файл данных.

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

1. привет @kunif, проблема в том, что вся моя печать выполняется через текстовый файл. Итак, вы говорите мне, что я должен отказаться от печати в формате txt и печатать байты?