Warm tip: This article is reproduced from serverfault.com, please click

crc-斑马打印机

(crc - Zebra Printer)

发布于 2015-10-27 12:01:24

我想我非常接近要打印此文件。但是,事实并非如此。没有抛出异常,它看起来确实在打斑马打印机,但是什么也没有。因为我认为大多数人都处于我现在的位置,对此一无所知,这是一个很长的路要走。任何人所能提供的任何帮助,无论多么小,都会受到欢迎,我失去了生活的意志

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;
    }
Questioner
Clare Barrington
Viewed
0
Clare Barrington 2015-11-05 19:48:44

以下代码对我有用。问题是命令,这些非常重要!我在下面使用的命令概述,可以在这里找到更多信息

打印图像

^ XA 起始格式说明^ XA命令用于ZPL II代码的开头。它是左括号,表示新标签格式的开始。该命令用单个ASCII控制字符STX(control-B,十六进制02)代替。格式^ XA注释有效的ZPL II格式要求标签格式应以^ XA命令开头,并以^ XZ命令结尾。

^ FO 字段原点说明^ FO命令设置相对于标签起始位置(^ LH)位置的字段原点。^ FO通过沿x轴和y轴定义与旋转无关的点来设置字段区域的左上角。格式^ FOx,y,z

  • x = x轴位置(以点为单位)可接受的值:0到32000默认值:0
  • y = y轴位置(以点为单位)可接受的值:0到32000默认值:0
  • z =对齐Z参数仅在固件版本V60.14.x,V50.14.x或更高版本中受支持。接受的值:0 =左对齐1 =右对齐2 =自动对齐(取决于脚本)默认值:上次接受的^ FW值或^ FW默认值

^ IM 图像移动说明^ IM命令执行将图像从存储区直接移动到位图的操作。该命令与^ XG命令(调用图形)相同,但没有上浆参数。格式^ IMd:ox

  • d =存储对象的位置接受的值:R:,E:,B:和A:默认值:搜索优先级
  • o =对象名称可接受的值:1到8个字母数字字符默认值:如果未指定名称,则使用UNKNOWN
  • x =扩展名固定值:.GRF,.PNG

^ FS 字段分隔符说明^ FS命令表示字段定义的结尾。或者,也可以将^ FS命令作为单个ASCII控制代码SI(Control-O,十六进制0F)发出。格式^ FS

^ XZ 结束格式说明^ XZ命令是结束(结束)括号。它指示标签格式的结尾。收到此命令后,将打印标签。该命令也可以作为单个ASCII控制字符ETX(Control-C,十六进制03)发出。格式^ XZ注释标签格式必须以^ XA命令开头,并以^ XZ命令结尾,以采用有效的ZPL II格式。

zplToSend

^ MN 媒体跟踪说明此命令指定正在使用的媒体类型和黑点偏移(以点为单位)。此项目符号列表显示了与此命令关联的媒体类型:

  • 连续纸–此纸没有物理特征(例如卷筒纸,缺口,穿孔,黑色标记)以分开标签。标签长度由^ LL命令确定。
  • 连续纸,可变长度–与连续纸相同,但是如果打印标签的某些部分超出了定义的标签长度​​,标签尺寸将自动扩展以容纳它们。此标签长度扩展名仅适用于当前标签。请注意,^ MNV仍然需要使用^ LL命令来定义初始所需标签长度。
  • 非连续介质–这种介质具有某种类型的物理特征(例如卷筒纸,缺口,穿孔,黑色标记)以分隔标签。

格式^ MNa,b

  • a =正在使用的介质可接受的值:N =连续介质Y =非连续介质卷筒纸检测d,e W =非连续介质卷筒纸检测d,e M =非连续介质卷筒纸检测A =自动检测卷筒纸的类型校准期间的介质d,f V =连续介质,长度可变g默认值:必须输入一个值或忽略该命令
  • b =以点为单位的黑色标记偏移量设置相对于文档之间的分离点的介质标记的预期位置。如果设置为0,则预期在分离点找到介质标记。(即穿孔,切点等)。所有值均以点列出。除非将a参数设置为M,否则将忽略此参数。如果缺少此参数,则使用默认值。可接受的值:-80至283(仅用于直热式打印机)-240至566(用于600 dpi打印机)-75至283(对于KR403打印机)-120至283(对于所有其他打印机)默认值:0

〜DY 下载对象说明〜DY命令以任何受支持的格式将图形对象或字体下载到打印机。可以使用此命令代替〜DG,以获取更多的保存和加载选项。〜DY是首选命令,可在固件版本低于X.13的打印机上下载TrueType字体。它比〜DU快。〜DY命令还支持下载无线证书文件。格式〜DYd:f,b,x,t,w,data

注意 使用证书文件时,打印机支持:-使用隐私增强邮件(PEM)格式的证书文件。-使用客户端证书和私钥作为两个文件,每个文件分别下载。-使用可导出的PAC文件进行EAP-FAST。-Zebra建议使用线性麦粒肿

  • d =文件位置.NRD和.PAC文件位于E ::固件版本V60.15.x,V50.15.x或更高版本中。可接受的值:R:,E:,B:和A:默认值:R:
  • f =文件名可接受的值:1到8个字母数字字符默认值:如果未指定名称,则使用UNKNOWN
  • b =仅在固件版本V60.14.x,V50.14.x或更高版本中支持在数据字段.TTE和.TTF中下载的格式。接受的值:A =未压缩(ZB64,ASCII)B =未压缩(.TTE,.TTF,二进制)C = AR压缩(仅由Zebra的BAR-ONE®v5使用)P =便携式网络图形(.PNG)-ZB64编码的默认值:必须指定一个值

clearDownLabel

^ ID 说明^ ID命令从存储区域删除对象,图形,字体和存储的格式。可以有选择地或成组删除对象。此命令可以在打印格式中用于在保存新对象之前删除对象,也可以在独立格式中用于删除对象。

图像名称和扩展名支持使用 Asterisk (*)作为通配符。这使你可以轻松删除选定的对象组。格式^ IDd:ox

  • d =存储对象的位置接受的值:R:,E:,B:和A:默认值:R:
  • o =对象名称可接受的值:1到8个字符名称缺省值:如果未指定名称,则使用UNKNOWN
  • 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();
                            }
                        }
                    }
                }
            }
        }