2014-01-13 3 views
0

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

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

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

принтер возвращается с сообщением "OK". И затем я отправляю байты данных bigfoot.1 на принтер, используя сокет.

Шаг 2 Печать изображения "bigfoot.1":

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

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

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); 
     } 
    } 

ответ

0

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

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), который действует так же, как добавление разделителя строк. И все получилось отлично.

+0

Как насчет TCP-порта? В моем приложении расстояние между ПК и принтером велико, поэтому мне нужно использовать TCP, а не последовательный порт. –

+0

Вы нашли ответ, как загрузить пользовательское изображение PCX (монохромное черно-белое изображение) через сеть TCP? У меня точно такая же проблема. Я отправляю команду IMAGE LOAD, новую строку (LF), записывает байты данных, остальные команды DirectProtocol. Изображение не сохраняется в принтере. – Whome

Смежные вопросы