Передача изображения на принтер Intermec PM4i, а затем печать

Я использую Fingerprint для загрузки, а затем печати изображения в формате pcx.

Шаг 1 Загрузите изображение на принтер, используя TCP-порт, я использую команду:

IMAGE LOAD "bigfoot.1",1746,""\r\n

Принтер возвращается с сообщением «ОК». А затем я отправляю байты данных bigfoot.1 на принтер с помощью сокета.

Шаг 2. Распечатайте изображение «йети.1»:

PRPOS 200,200
DIR 3
ALIGN 5
PRIMAGE "bigfoot.1"
PRINTFEED
RUN

Приходит проблема, принтер возвращается с сообщением "Изображение не найдено". Поэтому я придумываю возможность отказа от загрузки. Итак, я открываю программное обеспечение PrintSet4, чтобы проверить изображение, изображение уже существует в TMP. Странно!!! Наконец, я использовал PrintSet4, чтобы заменить приложение сокета для загрузки изображения. После добавления файла и применения я использую команду печати step2 для печати изображения, оно отлично работает! Вот код С# для загрузки изображения:

public void SendFile(string filePath, string CR_LF)
{
    FileInfo fi = new FileInfo(filePath);
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        byte[] byteFile = new byte[fs.Length];
        string cmd = "IMAGE LOAD \"" + fi.Name + "\"," + byteFile.Length.ToString() + ",\" \"" + CR_LF;
        ClientSocket.Send(encode.GetBytes(cmd));
        fs.Read(byteFile, 0, byteFile.Length);
        Thread.Sleep(1000);
        ClientSocket.Send(byteFile);
    }
}

person Andy Fong    schedule 13.01.2014    source источник


Ответы (1)


Я изменил ваш код и использовал последовательный порт.

public void SendFile(string filePath)
{
    SerialPort port = new SerialPort("COM3", 38400, Parity.None, 8, StopBits.One);
    port.Open();
    FileInfo fi = new FileInfo(filePath);
    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        byte[] byteFile = new byte[fs.Length];
        // string cmd = "IMAGE LOAD \"" + fi.Name + "\"," + teFile.Length.ToString()+                     ",\"\"" + CR_LF;
        string cmd = "IMAGE LOAD " + "\"" + fi.Name + "\"" + "," + byteFile.Length.ToString() + "," + "\"S\"";

        port.WriteLine(cmd);
        fs.Read(byteFile, 0, byteFile.Length);
        port.Write(byteFile,0,byteFile.Count());
        int count = byteFile.Count();
        int length = byteFile.Length;
    }
}

Итак, я заметил, что проблема заключается в использовании CR_LF. Вместо этого я использовал port.WriteLine(cmd), который действует так же, как добавление разделителя строк. И это работало нормально.

person ChankieChanc    schedule 26.02.2014
comment
Как насчет TCP-порта? В моем приложении расстояние между ПК и принтером велико, поэтому мне нужно использовать TCP, а не последовательный порт. - person Andy Fong; 06.03.2014
comment
Нашли ли вы ответ, как загрузить пользовательский образ PCX (монохромный черно-белый) по сети TCP? У меня точно такая же проблема. Я отправляю команду IMAGE LOAD, новую строку (LF), записываю байты данных, остальные команды DirectProtocol. Изображение не сохраняется в принтере. - person Whome; 10.11.2014