
for (i=0;i<items.length;i++){
String line;
padding = 50-items[i].length();
int words = items[i].split("\\s+").length;
Log.i("info","words: " + words);
if (words==2) padding += words-1;
else if (words==3) padding += words-2;
else if (words==4) padding += words-2;
//line = String.format("%55s%s", items[i], prices[i]);
Log.i("info","padding:" + padding);
//for (int x=0;x<padding;x++) line +="-";
line = String.format("%1$-" + padding + "s", items[i]);
tempContent += line + "P" + prices[i] + "\n";
total += Double.parseDouble(prices[i]);
}
tempContent += "-----------\n";
tempContent += String.format("%1$-" + 28 + "s", "Total");
tempContent += Double.toString(total);
final String orderContent = tempContent;
// then sending to the print function
print.sendData("Table " + tableNumber + "\n\n" + orderContent);正如您所看到的,我尝试了各种失败的尝试来解决这个问题。对于实际的蓝牙代码,我使用了这个指南- https://www.androidcode.ninja/android-bluetooth-tutorial/。
打印效果很好,只是标题中描述的间距有点问题。
这里又是我的问题-如何打印空格或左/右对齐的内容在一行上从Android到收据打印机通过蓝牙?
这不是一个非常清楚的问题,但为了清楚,我希望能够左对齐项目,然后右对齐价格,或者使用某种空间生成方法,可以为我实现这一点,例如,可以考虑项目字符串的长度,就像我尝试做的那样。
忽略价格的双精度,我计划将其替换为两个Integer值,因为我知道使用浮点数进行定价是不准确的。
谢谢你的帮助。
发布于 2017-06-17 23:29:46
我听到一些人建议我应该使用等宽字体,这样我就可以像上面那样使用空格对齐。所以我把它作为我的问题的第一个答案,但我希望接下来会有更多和潜在更好的答案。
如果这是正确的解决方案,有人知道在向设备发送数据时设置字体的简单方法吗?
当前正在使用这个简单的命令发送字符串:
mmOutputStream.write(data.getBytes());我认为这是需要改变的线,但它不接受‘单一空间’作为一个定义:
final String data = new String(encodedBytes, "US-ASCII");好吧,我是在装傻,编码和字体是不同的东西。问题是,必须有一种方法来“指示”打印机使用哪种字体打印,我认为是有的。只是不确定那是什么方式。
更多的研究。我找到了这个带有ESC/POS命令的页面,所以我假设有可能以某种方式在数据中发送这些命令来获取我需要的内容,例如Tab键命令- https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=72
我的打印机不是这家公司的,我假设ESC/POS是大多数像我这样的打印设备的标准。
https://stackoverflow.com/questions/44606206
复制相似问题