如何使用 ASCII 在一行中制作浮动的左侧和右侧文本?

如何使用 ASCII 在一行中制作浮动的左侧和右侧文本?

我正在尝试将文本放在一行中,左右对齐。请参阅示例图像来了解我的意思:

在此处输入图片描述

有人知道这个 ascii 代码吗?

我所知道的是这是左对齐的 ASCII 码:

'\x1B' + '\x61' + '\x30', // left align

然后右对齐:

'\x1B' + '\x61' + '\x32', // right align

我尝试像这样使用这些 ascii 将文本放在一行中,但是没有用,相反,它使整个文本右对齐:

'\x1B' + '\x61' + '\x30' + 'Text left' + '\x1B' + '\x61' + '\x32' + 'Text right',

顺便说一句,我正在尝试使用此包在热敏打印机上打印收据:http://qz.io/download。我现在可以打印收据了。只是想用这种方式格式化产品。Windows 是操作系统。

任何帮助深表感谢。

答案1

我不知道您的打印机,但一般来说,对齐代码与整条线路有关。

在一个 邮政 关于其中一台打印机,有人这么说:

仅当在标准模式下的行首处理时,该命令才有效。

其他 打印机手册 对于“ESC a”来说:

将一行中的所有数据对齐到指定位置。

答案2

如果 POS 接受直接 ESC 代码,那么您可以使用例如PowerShell

您可以将字符串形成为标准 ESC 序列,其中“ 0x1B”将表示为特殊字符看起来就像

 `e[

其中`e是转义字符,[是 ESC 序列的介绍。

因此你可以将字符串组成如下形式:

Write-Output "`e[a0LEFT`e[a2RIGHT";

如果您想使用HEX您发布的代码,您需要一个printf在任何基于 unix 的环境中可用的标准函数(例如自带的函数)WSL或使用-f 操作员其中PowerShell基本上是捷径字符串格式方法,然后你可以使用

"{0}{1}{2}{3}{4}{5}{6}{7}" -f 0x1B,0x61,0x30,"Left",0x1B,0x61,0x32,"Right"

附言

如果销售点不接受ESC键序列,然后您可以形成如下所示的字符串。假设您知道打印机的最大行长度为 80,那么我们可以这样做:

printf "%-40s%40s\n" "Left" "Right"

答案3

因此,由于这是 JS 中的代码,并且 ESC/POS 接受像这样的空引号上的空格," "因此我专注于做一个循环,该循环根据纸张宽度减去占位符字符串的长度加上价格的长度来创建空格。宽度可以通过"."纸张上适合的点数来确定。您可以通过反复试验来做到这一点,这意味着您将进行大量的测试打印。

因此如果我们有:

Sub Total          USD

作为占位符字符串,我们只需计算其长度,然后将其添加到价格中(十进制)。然后,从32该总和中减去(即纸张宽度/适合纸张的总点数)。一旦得到结果,您现在就可以创建一个生成空格的循环" "

这是我创建的功能。

function addSpaces(placeholder, value) {
    var spaces = '';
    var width = 32 - (placeholder + parseInt(value.length));
    let counter = 1;
    while (counter <= width) {
        spaces += " ";
        counter++;
    }
    return spaces;
}

然后我像这样调用该函数:

'\x1B' + '\x61' + '\x30',
'Sub Total' + addSpaces(12, $('input[name="sub_total"]').val()) + 'USD + $('input[name="sub_total"]').val() + '\x0A'

在哪里:

'\x1B' + '\x61' + '\x30' // left align
'\x0A' // next line

相关内容