Epson epos sdk 收据对齐问题

Tru*_*tch 3 java thermal-printer epson

我目前正在使用 epson ePOS SDK for android。我需要在同一行中打印菜单名称左对齐且价格右对齐的收据,但它无法正常工作,我的临时解决方案是添加一些馈送线以使其价格正确对齐,是否可能让两个文本在同一行中左右对齐?(以下附件,请忽略问号符号)

                mPrinter.addTextAlign(Printer.ALIGN_LEFT);
                mPrinter.addFeedLine(0);
                textData.append(menuName);
                mPrinter.addText(textData.toString());
                textData.delete(0, textData.length());
                mPrinter.addFeedLine(0);

                //print price
                mPrinter.addTextAlign(Printer.ALIGN_RIGHT);
                textData.append(price + "Y" + "\n");
                mPrinter.addText(textData.toString());
                textData.delete(0, textData.length());
                mPrinter.addFeedLine(0);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Mar*_*ler 5

80mm 就像每行 42 列......可以轻松填充:

mPrinter.addText(padLine(menuName, price + "?", 42) + "\n");
Run Code Online (Sandbox Code Playgroud)

所需的String操作方法类似:

/** utility: pads two strings to columns per line */
protected String padLine(@Nullable String partOne, @Nullable String partTwo, int columnsPerLine){
    if(partOne == null) {partOne = "";}
    if(partTwo == null) {partTwo = "";}
    String concat;
    if((partOne.length() + partTwo.length()) > columnsPerLine) {
        concat = partOne + " " + partTwo;
    } else {
        int padding = columnsPerLine - (partOne.length() + partTwo.length());
        concat = partOne + repeat(" ", padding) + partTwo;
    }
    return concat;
}

/** utility: string repeat */
protected String repeat(String str, int i){
    return new String(new char[i]).replace("\0", str);
}
Run Code Online (Sandbox Code Playgroud)

在填充之前,应该将价格格式化为货币。

使其真正“完美无瑕”......当String concat超过 length 时42String partOne应该被多余的长度截断 - 并再次连接。超过int columnsPerLine很可能会弄乱输出。