我无法在EPL2打印机上制作和上传图形。
完全厌倦了任何可用的软件并在互联网上搜索,我感到很茫然。
我有一个1位文件,我尝试使用以下脚本上传..
setppi.txt
GK"NAMEPCX"
GK"NAMEPCX"
GM"NAMEPCX"3042
然后使用
上传copy setppi.txt+ppirmt.pcx lpt1/b
在我撕掉剩下的头发之前,有经验的人有没有任何提示?我几乎可以肯定这个问题与pcx的创建有关,但尝试了所有选项,我不确定我的下一步。
答案 0 :(得分:3)
以下是我发现正确创建PCX的方法:
在gimp中,将文件另存为1位(黑白)BMP。不要选择PCX,因为保存的格式不是打印机要求的1位PCX!
使用imagemagick的转换程序将BMP转换为PCX。
我解决之后遇到的另一个问题是图形仍然是损坏的,这是一个代码页问题,所以要小心。
答案 1 :(得分:2)
您没有提及您正在使用的编程语言。
如果它是C#(或一般的.NET),那么这是一篇关于使用EPL打印图像的博文:
Using the EPL2 GW command to send an image to a Zebra thermal printer
来自同一个人的另一篇博文that got me started with printing EPL to Zebra printers with C#。
答案 2 :(得分: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..
稍后您应该能够将此存储的“namepcx”写入打印机的图像缓冲区
GM
但是我花了两天时间尝试存储PCX,但它永远不能正确存储。所以我最终只是使用GW
命令将像素数据直接写入打印机图像缓冲区。避免“存储在闪存中”。最初通过GM的这种“闪存”存储器意味着存储一些图像(如徽标),这些图像将在所有标签上重复出现。因此,您可以存储一次,然后打印10 000个带有相同徽标的标签。但是,如果从java中引用,通常会在不同的标签上打印许多不同的图像。因此,如果您为每个标签存储闪存新图像,那么您将很快“磨损”闪存。 (例如,LP 2824打印机的手册说闪存只有100k的写周期)。
因此,似乎使用GW
将图像直接写入图像缓冲区而不是使用3步GK GM GG
可能是更好的解决方案。
答案 3 :(得分:0)
免责声明:我目前正在编写一个SVG-to-EPL-transpiler,可以找到here
我最近遇到了同样的问题,并通过向打印机发送GW
命令解决了这个问题。
与GK
- GK
- GM
- GG
的主要区别在于您不会发送PCX标头,而是发送原始二进制文件数据(没有LRE压缩的afaik)。
我使用了以下(非优化/天真)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;
}
}
}
转换时必须注意的事项:
width
必须是8的倍数(因为我们发送字节) - 上面的代码通过填充来处理这个我还实施了GM
- GG
,但这超出了这个答案的范围。相关代码可在EplCommands.StoreGraphics(bitmap:Bitmap,name:string)
。