我想我非常接近要打印此文件。但是,事实并非如此。没有抛出异常,它看起来确实在打斑马打印机,但是什么也没有。因为我认为大多数人都处于我现在的位置,对此一无所知,这是一个很长的路要走。任何人所能提供的任何帮助,无论多么小,都会受到欢迎,我失去了生活的意志
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var stream = new MemoryStream())
{
if (responseStream == null)
{
return;
}
responseStream.CopyTo(stream);
stream.Position = 0;
using (var zipout = ZipFile.Read(stream))
{
using (var ms = new MemoryStream())
{
foreach (var e in zipout.Where(e => e.FileName.Contains(".png")))
{
e.Extract(ms);
}
if (ms.Length <= 0)
{
return;
}
var binaryData = ms.ToArray();
byte[] compressedFileData;
// Compress the data using the LZ77 algorithm.
using (var outStream = new MemoryStream())
{
using (var compress = new DeflateStream(outStream, CompressionMode.Compress, true))
{
compress.Write(binaryData, 0, binaryData.Length);
compress.Flush();
compress.Close();
}
compressedFileData = outStream.ToArray();
}
// Encode the compressed data using the MIME Base64 algorithm.
var base64 = Convert.ToBase64String(compressedFileData);
// Calculate a CRC across the encoded data.
var crc = Calc(Convert.FromBase64String(base64));
// Add a unique header to differentiate the new format from the existing ASCII hexadecimal encoding.
var finalData = string.Format(":Z64:{0}:{1}", base64, crc);
var zplToSend = "~DYR:LOGO,P,P," + finalData.Length + ",," + finalData;
const string PrintImage = "^XA^FO0,0^IMR:LOGO.PNG^FS^XZ";
try
{
var client = new System.Net.Sockets.TcpClient();
client.Connect(IpAddress, Port);
var writer = new StreamWriter(client.GetStream(), Encoding.UTF8);
writer.Write(zplToSend);
writer.Flush();
writer.Write(PrintImage);
writer.Close();
client.Close();
}
catch (Exception ex)
{
// Catch Exception
}
}
}
}
}
}
private static ushort Calc(byte[] data)
{
ushort wCrc = 0;
for (var i = 0; i < data.Length; i++)
{
wCrc ^= (ushort)(data[i] << 8);
for (var j = 0; j < 8; j++)
{
if ((wCrc & 0x8000) != 0)
{
wCrc = (ushort)((wCrc << 1) ^ 0x1021);
}
else
{
wCrc <<= 1;
}
}
}
return wCrc;
}
以下代码对我有用。问题是命令,这些非常重要!我在下面使用的命令概述,可以在这里找到更多信息
打印图像
^ XA 起始格式说明^ XA命令用于ZPL II代码的开头。它是左括号,表示新标签格式的开始。该命令用单个ASCII控制字符STX(control-B,十六进制02)代替。格式^ XA注释有效的ZPL II格式要求标签格式应以^ XA命令开头,并以^ XZ命令结尾。
^ FO 字段原点说明^ FO命令设置相对于标签起始位置(^ LH)位置的字段原点。^ FO通过沿x轴和y轴定义与旋转无关的点来设置字段区域的左上角。格式^ FOx,y,z
^ IM 图像移动说明^ IM命令执行将图像从存储区直接移动到位图的操作。该命令与^ XG命令(调用图形)相同,但没有上浆参数。格式^ IMd:ox
^ FS 字段分隔符说明^ FS命令表示字段定义的结尾。或者,也可以将^ FS命令作为单个ASCII控制代码SI(Control-O,十六进制0F)发出。格式^ FS
^ XZ 结束格式说明^ XZ命令是结束(结束)括号。它指示标签格式的结尾。收到此命令后,将打印标签。该命令也可以作为单个ASCII控制字符ETX(Control-C,十六进制03)发出。格式^ XZ注释标签格式必须以^ XA命令开头,并以^ XZ命令结尾,以采用有效的ZPL II格式。
zplToSend
^ MN 媒体跟踪说明此命令指定正在使用的媒体类型和黑点偏移(以点为单位)。此项目符号列表显示了与此命令关联的媒体类型:
格式^ MNa,b
〜DY 下载对象说明〜DY命令以任何受支持的格式将图形对象或字体下载到打印机。可以使用此命令代替〜DG,以获取更多的保存和加载选项。〜DY是首选命令,可在固件版本低于X.13的打印机上下载TrueType字体。它比〜DU快。〜DY命令还支持下载无线证书文件。格式〜DYd:f,b,x,t,w,data
注意 使用证书文件时,打印机支持:-使用隐私增强邮件(PEM)格式的证书文件。-使用客户端证书和私钥作为两个文件,每个文件分别下载。-使用可导出的PAC文件进行EAP-FAST。-Zebra建议使用线性麦粒肿
clearDownLabel
^ ID 说明^ ID命令从存储区域删除对象,图形,字体和存储的格式。可以有选择地或成组删除对象。此命令可以在打印格式中用于在保存新对象之前删除对象,也可以在独立格式中用于删除对象。
图像名称和扩展名支持使用 Asterisk (*)作为通配符。这使你可以轻松删除选定的对象组。格式^ IDd:ox
x =扩展名接受值:符合Zebra约定的任何扩展名默认值:.GRF
const string PrintImage = "^XA^FO0,0,0^IME:LOGO.PNG^FS^XZ";
var zplImageData = string.Empty;
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var stream = new MemoryStream())
{
if (responseStream == null)
{
return;
}
responseStream.CopyTo(stream);
stream.Position = 0;
using (var zipout = ZipFile.Read(stream))
{
using (var ms = new MemoryStream())
{
foreach (var e in zipout.Where(e => e.FileName.Contains(".png")))
{
e.Extract(ms);
}
if (ms.Length <= 0)
{
return;
}
var binaryData = ms.ToArray();
foreach (var b in binaryData)
{
var hexRep = string.Format("{0:X}", b);
if (hexRep.Length == 1)
{
hexRep = "0" + hexRep;
}
zplImageData += hexRep;
}
var zplToSend = "^XA" + "^FO0,0,0" + "^MNN" + "~DYE:LOGO,P,P," + binaryData.Length + ",," + zplImageData + "^XZ";
var label = GenerateStreamFromString(zplToSend);
var client = new System.Net.Sockets.TcpClient();
client.Connect(IpAddress, Port);
label.CopyTo(client.GetStream());
label.Flush();
client.Close();
var cmd = GenerateStreamFromString(PrintImage);
var client2 = new System.Net.Sockets.TcpClient();
client2.Connect(IpAddress, Port);
cmd.CopyTo(client2.GetStream());
cmd.Flush();
client2.Close();var clearDownLabel = GenerateStreamFromString("^XA^IDR:LOGO.PNG^FS^XZ");
var client3 = new System.Net.Sockets.TcpClient();
client3.Connect(IpAddress, Port);
clearDownLabel.CopyTo(client3.GetStream());
clearDownLabel.Flush();
client3.Close();
}
}
}
}
}
}