2014-01-13 110 views
0

我正在使用指紋上傳,然後使用pcx格式打印圖像。圖像傳輸到Intermec PM4i打印機,然後打印

第一步上傳圖像到打印機使用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端口怎麼樣?在我的應用程序中,PC和打印​​機之間的距離很長,所以我需要使用TCP而不是串行端口。 –

+0

您是否找到答案如何通過TCP網絡上傳PCX(單色黑白)自定義圖像?我有完全相同的問題。我提交了IMAGE LOAD命令,換行符(LF),寫入數據字節,以及其他DirectProtocol命令。圖像不存儲在打印機中。 – Whome

相關問題