2012-10-18 33 views

回答

0

如果您已经创建了.CPF文件,您可以只发送文件内容到打印机,它会正确保存字体。

只需打开的插座,并write所有字节出

+0

您好,感谢您的答复..但我已经尝试过这一点,并正在打印的字节作为这样的 – Midhun

+0

是行式打印模式下的打印机吗?检查 ! U1 getvar“device.languages” –

+0

嗨,试过这个并得到了答复为“zpl_cpcl”。我正在寻找的东西在“!UTILITEIS DEL asdf.cpf打印”(用于从打印机中删除文件)。唯一的事情是我想发送和保存文件到打印机不删除。请帮助。 – Midhun

1

试试这个:

string sFileName; //file name in DOS format (8.3) 
byte[] baBody; //byte array of font file 
string PacketHeader = "! CISDF\r\n{0}\r\n{1}\r\n{2}\r\n"; 
//************************ 
int CheckSum = 0; 
foreach (byte b in baBody) 
    CheckSum += b; 

PacketHeader = String.Format(PacketHeader, sFileName, Convert.ToString(baBody.Length, 16).PadLeft(8, '0').ToUpper(), Convert.ToString(65536 - (CheckSum % 65536), 16).PadLeft(4, '0').ToUpper()); 

List<byte> list = new List<byte>(); 
list.AddRange(Encoding.Default.GetBytes(PacketHeader.ToCharArray())); 
list.AddRange(baBody); 
list.AddRange(new byte[] { 0x1B, 0x68, 0x1B, 0x68, 0x1B, 0x68, 0x1B, 0x70, 0x00 }); 

int PacketSize = list.Count; 
byte[] tmp; 
int sourceIndex = 0; 

while (PacketSize/512 >= 1) 
{ 
    tmp = list.GetRange(sourceIndex, 512).ToArray(); 
    int BytesSent = bt.WriteBytesToSerialPort(tmp); 
    tmp = null; 
    sourceIndex += BytesSent; 
    PacketSize -= BytesSent; 
    Sleep(100); 
} 

if (PacketSize > 0) 
{ 
    tmp = list.GetRange(sourceIndex, list.Count - sourceIndex).ToArray(); 
    PacketSize -= bt.WriteBytesToSerialPort(tmp); 
    tmp = null; 
} 

list.Clear(); 
list = null;