gpt4 book ai didi

c# - 将 PNG 图像打印到 Zebra 网络打印机

转载 作者:可可西里 更新时间:2023-11-01 08:37:20 34 4
gpt4 key购买 nike

我正在尝试找到一种将图像打印到斑马的方法,但遇到了很多麻烦。

根据文档:

The first encoding, known as B64, encodes the data using the MIME Base64 scheme. Base64 is used to encode e-mail atachedments ...
Base64 encodes six bits to the byte, for an expantion of 33 percent over the un-enclosed data.
The second encoding, known as Z64, first compresses the data using the LZ77 algorithm to reduce its size. (This algorithm is used by the PKZIP and is intergral to the PNG graphics format.)
The compressed data is then encoded using the MIME Base64 scheme as described above.
A CRC will be calculated accross the Base64-encoded data.

但它没有更多的信息。

基本上我在尝试编码

private byte[] GetItemFromPath(string filepath)
{
using (MemoryStream ms = new MemoryStream())
{
using (Image img = Image.FromFile(filepath))
{
img.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
}
}

然后尝试打印类似的东西:

var initialArray = GetItemFromPath("C:\\RED.png");
string converted = Convert.ToBase64String(b);

PrintThis(string.Format(@"~DYRED.PNG,P,P,{1},0,:B64:
{0}
^XA
^F0200,200^XGRED.PNG,1,1^FS
^XZ", converted .ToString(), initialArray.Length));

从字面上看,B64和Z64都接受。

我尝试了一些变体,以及一些用于生成 CRC 和计算“大小”的方法。但似乎都不起作用,并且将图形下载到打印机总是被中止。

有没有人设法完成这样的事情?或者知道我哪里出错了?

最佳答案

我得到这个答案的所有功劳都来自 LabView Forum用户 Raydur。他发布了一个可以在 LabView 中打开以发送图像的 LabView 解决方案。我个人并没有用我的打印机运行它,我只是用它来找出正确的图像代码,这样我就可以在我的代码中复制它。我缺少的最重要的事情是填充我的十六进制代码。比如1A就可以,但是如果你只有A,就需要在它前面补一个0,才能发送0A。您发送的 ZPL 中文件的大小也是字节数组的原始大小,而不是数据的最终字符串表示形式。

我搜索了很多很多论坛和 Stackoverflow 帖子试图弄清楚这个问题,因为这似乎是一件很简单的事情。我已经尝试了其他地方发布的每一个解决方案,但我真的只想打印一个.PNG,因为我的打印机(Mobile QLN320)的手册内置了对它的支持。它说要么以 Base64 格式发送,要么以十六进制格式发送,我都试过了都无济于事。对于任何想要使用 Base64 的人,我在一本较旧的手册中发现您需要为发送的每个数据包手动计算 CRC 代码,因此我选择了更简单的十六进制路线。所以这是我要工作的代码!

        string ipAddress = "192.168.1.30";
int port = 6101;

string zplImageData = string.Empty;
//Make sure no transparency exists. I had some trouble with this. This PNG has a white background
string filePath = @"C:\Users\Path\To\Logo.png";
byte[] binaryData = System.IO.File.ReadAllBytes(filePath);
foreach (Byte b in binaryData)
{
string hexRep = String.Format("{0:X}", b);
if (hexRep.Length == 1)
hexRep = "0" + hexRep;
zplImageData += hexRep;
}
string zplToSend = "^XA" + "^MNN" + "^LL500" + "~DYE:LOGO,P,P," + binaryData.Length + ",," + zplImageData+"^XZ";
string printImage = "^XA^FO115,50^IME:LOGO.PNG^FS^XZ";

try
{
// Open connection
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient();
client.Connect(ipAddress, port);

// Write ZPL String to connection
System.IO.StreamWriter writer = new System.IO.StreamWriter(client.GetStream(),Encoding.UTF8);
writer.Write(zplToSend);
writer.Flush();
writer.Write(printImage);
writer.Flush();
// Close Connection
writer.Close();
client.Close();
}
catch (Exception ex)
{
// Catch Exception
}

关于c# - 将 PNG 图像打印到 Zebra 网络打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8818688/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com