【发布时间】:2020-09-25 01:09:47
【问题描述】:
在 Epson LX-300 II 点阵打印机中设置水平打印位置时遇到问题。设置水平打印位置的命令有时不起作用。
我需要它来将可打印数据与预打印纸质表单中的相应列对齐。
给定以下代码:
// row 1
escp.setAbsoluteHorizontalPosition(1);
escp.print("Equipment");
escp.setAbsoluteHorizontalPosition(10);
escp.print("Serial");
escp.setAbsoluteHorizontalPosition(13);
escp.print("Remarks");
// row 2
escp.lineFeed();
escp.setAbsoluteHorizontalPosition(1);
escp.print("Equipment");
escp.setAbsoluteHorizontalPosition(10);
escp.print("Serial");
escp.setAbsoluteHorizontalPosition(13);
escp.print("Remarks");
这是预期的输出:
Equipment Serial Remarks
Equipment Serial Remarks
但是,这是实际的打印输出:
EquipmentSerial Remarks
EquipmentSerial Remarks
我不明白为什么“Serial”没有打印在正确的位置。
为了解决这个问题,我编写了一个测试程序,在一行中打印 'x' 1cm。
下面是测试程序的示例代码:
ESCPrinter escp = new ESCPrinter(sharedPrinterName, false);
if((escp.initialize()) == false) {
return;
}
escp.select10CPI();
escp.set8LPI();
escp.setCharacterSet(ESCPrinter.USA);
for(int x = 1; x < 15; x++) {
escp.setAbsoluteHorizontalPosition(x);
escp.print("x");
}
escp.formFeed();
escp.close();
预期输出:
x x x x x x x x x x x x x x
实际输出:
x x x x xxxxxx x x x x
这是Epson ESC/P Reference Manual,并且 这是我用来发送打印机命令的third-party code,我稍微修改了它以实现 set8LPI() 方法。
在参考手册中,设置绝对水平打印位置的命令在C-31中。
我已经尝试自己解决这个问题好几天了,但我离找到解决方案还差得远。
附加信息
我制作了另一个测试程序,从 0.0cm 到 19.8cm 的位置打印测试数据,增量为 0.2cm,每个位置之间换行。
我打印的测试数据也是我指定的绝对水平位置(方便识别)。
向您展示确切的打印输出是不切实际的,所以我会尽可能地描述它们。
将水平位置设置为 0.0 直到 5.4 似乎可行,输出如下所示:
0.0
0.2
0.3
0.4
.
.
.
--------> 5.4
之后,将绝对水平位置设置为 5.6cm 直到 10.8cm 被忽略。 打印机只在纸的最左侧打印。
“设置绝对水平位置”命令再次对 11.0cm 直到 16.2cm 起作用。 再次忽略 16.4cm 直到 19.8cm。
据我了解上面链接的 ESC/P 参考手册,当指定位置超出右边距时,打印机会忽略此命令。没有指定其他内容。
显然,我的价值观都在边缘。
那么,这可能是打印机的硬件问题吗?
--> 不是硬件问题。我使用不同的打印机得到了相同的结果。
更新
给定设置绝对水平位置的命令: ESC $ nl nh
我又做了一个测试程序,直接输入nh和nl参数。
我意识到只要 nl 值超过 127,这个命令就会被忽略。
我觉得这很令人惊讶,因为参考手册指出 nl 的最大值是 255。
这一发现与我输入以厘米为单位的水平位置的第一个测试程序一致。当我将厘米转换为被忽略命令的相应 nh 和 nl 值时,得到的 nl 值大于 127。
【问题讨论】:
标签: printing dot-matrix