2

我无法生成图形并将其上传到 EPL2 打印机。

几乎厌倦了任何可用的软件并在互联网上搜索,我不知所措。

我有一个 1 位文件,我尝试使用以下脚本上传..

setppi.txt

GK"NAMEPCX"
GK"NAMEPCX" 
GM"NAMEPCX"3042

然后上传

copy setppi.txt+ppirmt.pcx lpt1/b

在我撕掉剩下的头发之前,有经验的人有什么建议吗?我几乎可以肯定这个问题与 pcx 的创建有关,但是在尝试了所有选项后,我不确定我的下一步。

4

4 回答 4

3

这是我发现正确创建 PCX 的方法:

在 gimp 中,将文件保存为 1 位(黑白)BMP。不要选择PCX,因为保存的格式不是打印机要求的1-bit PCX!

使用 imagemagick 的转换程序将您的 BMP 转换为 PCX。

我遇到的另一个问题是图形仍然损坏,这是一个代码页问题,所以要小心。

于 2011-02-21T17:38:44.280 回答
2

您没有提及您正在使用哪种编程语言。

如果它是 C#(或一般的 .NET),那么这里有一篇关于使用 EPL 打印图像的博客文章:
使用 EPL2 GW 命令将图像发送到 Zebra 热敏打印机

同一个人的另一篇博客文章让我开始使用 C# 将 EPL 打印到 Zebra 打印机

于 2013-05-17T17:55:47.653 回答
1

使用 EPL2 语言输出 PCX 图形有两种方法。第一个是您建议的:

GK"namepcx"
GK"namepcx"
GM"namepcx",3042
..... and here follows monochrome PCX data ...
..... with 128-bit header and following pixel data 1 bit-per pixel..

稍后您应该可以通过 GM 将此存储的“namepcx”写入打印机的图像缓冲区,但是我花了两天时间尝试存储 PCX,但它永远不会正确存储。所以我最终只是简单地使用GW命令将像素数据直接写入打印机图像缓冲区。避免“存储在闪存中”。同样,最初通过 GM 进行的这种“闪存”存储旨在存储一些将在所有标签上重复的图像(如徽标)。因此,您可以将其存储一次,然后打印 10 000 个具有相同徽标的标签。但是,如果从 java 打印,通常您会在不同的标签上打印许多不同的图像。因此,如果您为每个标签存储闪存新图像,那么您将很快“磨损”闪存。(例如。

因此,似乎使用GW将 imag 直接写入图像缓冲区而不是使用 3-stepGK GM GG可能是更好的解决方案。

于 2013-09-01T14:13:28.460 回答
0

免责声明:我目前正在编写一个 SVG-to-EPL-transpiler,可以在这里找到

我最近遇到了同样的问题,并通过向打印机发送GW-command 解决了这个问题。

GK- GK- GM-的主要区别GG在于您不发送 PCX 标头,而是发送原始二进制数据(afaik 没有 LRE 压缩)。

我使用了以下(非优化/幼稚)C# 代码,它大量使用位移。该算法可以用任何语言实现,而且很简单:

[NotNull]
public IEnumerable<byte> GetRawBinaryData([NotNull] Bitmap bitmap,
                                          int octetts)
{
  var height = bitmap.Height;
  var width = bitmap.Width;

  for (var y = 0;
        y < height;
        y++)
  {
    for (var octett = 0;
          octett < octetts;
          octett++)
    {
      var value = (int) byte.MaxValue;

      for (var i = 0;
            i < 8;
            i++)
      {
        var x = octett * 8 + i;
        var bitIndex = 7 - i;
        if (x < width)
        {
          var color = bitmap.GetPixel(x,
                                      y);
          if (color.A > 0x32
              || color.R > 0x96 && color.G > 0x96 && color.B > 0x96)
          {
            value &= ~(1 << bitIndex);
          }
        }
      }

      yield return (byte) value;
    }
  }
}

转换时必须记住的事情:

  • 1:白点
  • 0:黑点
  • width必须是 8 的倍数(因为我们正在发送字节) - 上面的代码通过填充来解决这个问题
  • 标签的旋转/方向!
  • 此处实施了一些阈值...

我也实施了GM- GG,但这超出了这个答案的范围。相关代码可以在 中找到EplCommands.StoreGraphics(bitmap:Bitmap,name:string)

于 2016-05-15T16:51:24.587 回答