проблема печати из приложения на термопринтер

Привет, ребята, я создаю метод для печати счета-фактуры из своего приложения, но когда я отправляю байты на печать, он не печатает все байты, которые я отправляю на принтер, последние байты все время обрезаются, что приводит к в неполной фактуре это код, который я использую в данный момент:

public void Print(string nombreImpresora, string formatoFactura)
        {
            var listOfDevices = BluetoothAdapter.DefaultAdapter;
            if (listOfDevices == null)
                throw new Exception("No Bluetooth adapter found.");

            if (!listOfDevices.IsEnabled)
                throw new Exception("Bluetooth adapter is not enabled.");

            var device = (from bd in listOfDevices.BondedDevices
                          where bd.Name == nombreImpresora
                          select bd).FirstOrDefault();

            if (device == null)
                throw new Exception("Named device not found.");


            BluetoothSocket socket;
            var uuid = device.GetUuids()?.ElementAt(0);
            if (uuid != null)
            {
                socket = device.CreateInsecureRfcommSocketToServiceRecord(uuid.Uuid);
            }
            else
            {
                socket = device.CreateInsecureRfcommSocketToServiceRecord(UUID.FromString("00001101-0000-1000-8000-00805f9b34fb"));
            }

            if (socket.IsConnected)
            {
                return;
            }
            socket.Connect();

            byte[] completeBuffer = Encoding.ASCII.GetBytes(formatoFactura);
            Toast.MakeText(Forms.Context, Convert.ToString(completeBuffer.Length), ToastLength.Short).Show();
            var bufferSize = 256;
            int completedBufferLength = completeBuffer.Length;
            List<byte[]> bufferList = new List<byte[]>();

            for (int i = 0; i < completedBufferLength; i = i + bufferSize)
            {
                byte[] val = new byte[bufferSize];

                if (completedBufferLength < i + bufferSize)
                {
                    bufferSize = completedBufferLength - i;
                }

                Array.Copy(completeBuffer, i, val, 0, bufferSize);
                bufferList.Add(val);
            }

            for (int j = 0; j < bufferList.Count; j++)
            {
                socket.OutputStream.Write(bufferList[j], 0, bufferList[j].Length);
            }

            socket.Close();
            socket.Dispose();
        }

я отправляю строку и преобразовываю ее в байты в методе выше, строка представляет собой пользовательский счет, который я сделал с данными счета с другой страницы моего приложения. Я использую принтер Bixolon SPP-R310, на данный момент я не знаю, действительно ли это проблема, связанная с принтером. ¿Может ли кто-нибудь помочь мне с этим, пожалуйста? заранее спасибо


person Frank Guerra    schedule 07.03.2018    source источник


Ответы (1)


Прежде всего попробуйте добавить несколько пустых строк в конец вашей строки, используя "\n". Если вывод все еще неполный, измените device.CreateInsecureRfcommSocketToServiceRecord на device.createRfcommSocketToServiceRecord.

person Sotiris S. Magionas    schedule 07.03.2018
comment
в настоящее время я добавляю 5 \n в конце, но счет обрезается немного далеко от его конца, я понимаю, что принтер всегда печатает одинаковое количество байтов независимо от длины массива байтов. . я попробую то, что вы говорите, мой друг. - person Frank Guerra; 08.03.2018
comment
ты решил это @FrankGuerra? - person Max Pinto; 01.06.2021
comment
Да, это была проблема связи между устройством и принтером. - person Frank Guerra; 02.06.2021