2

每 24 行没有白线,我无法打印我的位图。我需要打印一个图像,但是这个图像有每 24 行到位的白线。

爱普生打印机将图像打印为下一种格式。

>line 23 01010101000010001010
>line 24 00001000100000000110
>line 25 --------- white line ------------

怎么能删掉这条该死的白线?

    Image size
    width:400px
    height:73px
        
    while (offset < height) 
    {
    //format ESC* Epson printer
    String modIMG = new String(new byte[]{0x1B, 0x2A, 33, 0, 2});
        img.append(modIMG);     
            for (int x = 0; x < width; ++x) {
                for (int k = 0; k < 3; ++k) {
                byte slice= 0;
                    for (int b = 0; b < 8; ++b) {
                    int y = (((offset / 8) + k) * 8) + b;
                    int i = (y * width) + x;
                    boolean v = false;
                        if (i < bitSet.length()) {
                            v = bitSet.get(i);}
                            slice |= (byte) ((v ? 1 : 0) << (7 - b));
                        }   
                        img.slice(new String(new byte[] {slice}));
                    }
                }
                offset += 24;
                img.append(new String(new String(new byte[]{0x1B,0x33,30}));
                }
4

4 回答 4

1

所以我解决了这个问题。使用 ESC '3' 24 将行距设置为 24 点是不够的,但您必须以页面模式打印图像。

进入页面模式:ESC 'L'

然后你必须使用 ESC 'W' 设置图像区域,这里我在 C 中进行:

           h2 = h * 2 + 30;
            /* Set the printing area, h * 2 because of double density */
            seq[0] = 0x1b;
            seq[1] = 'W';
            seq[2] = 0;     /* xl */
            seq[3] = 0;     /* xh */
            seq[4] = 0;     /* yl */
            seq[5] = 0;     /* yh */
            seq[6] = 0;     /* dxl */
            seq[7] = 2;     /* dxh */
            seq[8] = h2 % 256;      /* dyl */
            seq[9] = h2 / 256;      /* dyh */
            if (write(fd, seq, 10) != 10)
                    goto finish;

现在发送图像数据,最后通过发送 0x0c 打印,这也将打印机返回到标准模式。

通过使用页面模式,图像上的白色条纹消失了。

顺便说一句,这似乎是 EPSON TM-T88 打印机的一个奇怪之处,我在 TM-T500A 和 Aures 打印机上都没有看到这些白线。在这些打印机上,我可以使用标准模式打印图像。

于 2014-08-17T09:05:38.787 回答
1

我按照 Marc Balmer 的示例解决了它设置页面模式的问题,但必须发送 24*2 点(行高双密度)的提要才能使其工作:所以在每片数据发送命令ESC J n字节之后{27, 74, 48}。终于明白了!

希望能帮助到你!

参考(必须记录)

于 2017-01-28T11:25:43.617 回答
0

尝试在打印前发送 ESC/POS 命令 (0x1B, '3', 24)。这会将行距设置为 24 点,而不是默认的 30。

于 2014-03-23T22:33:24.447 回答
0

只是为了确认其他人的建议,我已经成功地使用“ ESC30 ”删除了数据条之间的白线。您可以在此处查看实际代码 (Haskell) 和结果

于 2017-11-29T22:32:28.593 回答