Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java格式化程序收据打印问题_Java_Formatter_Point Of Sale_Receipt - Fatal编程技术网

Java格式化程序收据打印问题

Java格式化程序收据打印问题,java,formatter,point-of-sale,receipt,Java,Formatter,Point Of Sale,Receipt,我正在设计一个收据,使用PrinterJob类用Java打印出来 我需要一些建议 根据我在这里看到的例子 如何将上面示例中给出的输出存储在jTextPanel中? 然后,我将使用PrinterJob类打印出jTextPanel中的文本内容 当我从POS打印机打印出jTextPanel内的文本内容时,我希望获得以下输出 以下是我目前掌握的代码 String s = String.format("Item Qty Price", "%-15s %5s %10s\n"); Stri

我正在设计一个收据,使用PrinterJob类用Java打印出来

我需要一些建议

根据我在这里看到的例子

如何将上面示例中给出的输出存储在jTextPanel中? 然后,我将使用PrinterJob类打印出jTextPanel中的文本内容

当我从POS打印机打印出jTextPanel内的文本内容时,我希望获得以下输出

以下是我目前掌握的代码

String s = String.format("Item Qty Price", "%-15s %5s %10s\n");
        String s1 = String.format("---- --- -----","%-15s %5s %10s\n");
        String output = s + s1;

        jTextPane1.setText(output);

        PrinterJob printerJob = PrinterJob.getPrinterJob();
        PageFormat pageFormat = printerJob.defaultPage();
        Paper paper = new Paper();
        paper.setSize(180.0, (double) (paper.getHeight() + lines * 10.0));
        paper.setImageableArea(margin, margin, paper.getWidth() - margin * 2, paper.getHeight() - margin * 2);
        pageFormat.setPaper(paper);
        pageFormat.setOrientation(PageFormat.PORTRAIT);
        printerJob.setPrintable(jTextPane1.getPrintable(null, null), pageFormat);
        printerJob.print();

有关于如何继续的建议吗?

将参数传递给
String.format
的顺序错误。首先是格式字符串(带百分号的),然后传递多个参数,格式字符串中每个百分比对应一个参数

因此,在你的情况下:

String s = String.format("%-15s %5s %10s\n", "Item", "Qty", "Price");
String s1 = String.format("%-15s %5s %10s\n", "----", "---", "-----");
您还需要行项目的格式字符串。 根据您的输出,可以是:

"%-15s %5d %10.2f\n"
(您可以将其用作:

String line = String.format("%-15s %5d %10.2f\n", itemName, quantity, price);
)

如果要截断长度超过15个字符的itemName,可以使用:

// "%.15s %5d %10.2f\n"
String line = String.format("%.15s %5d %10.2f\n", itemName, quantity, price);

看看这个。你寻求的答案就在那里。谢谢!查看如何处理项目名称很长的情况?我在答案中添加了解决方案。如何将长项目名称包装到多行?@Smith您需要在for循环中自己吐出项目名称;除最后一行外,每行只有15个字符的itemName部分,最后一行也有数量和价格。但是如果你想很好地换行,你需要在单词边界处换行,除非单词已经超过15个字符。