Java Formatter 收据打印问题

Law*_*ong 3 java formatter point-of-sale receipt

我正在设计一张收据,以便使用 PrinterJob 类在 Java 中打印出来。

我需要一些建议。

基于我在这里看到的例子。

http://www.javadocexamples.com/java_source/__/re/Receipt.java.html

如何将上面示例中给出的输出存储在 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();
Run Code Online (Sandbox Code Playgroud)

关于我该如何进行有什么建议吗?

Erw*_*idt 5

您传递参数的顺序String.format是错误的。格式字符串位于第一个(带有百分号的字符串),然后传递多个参数,格式字符串中的每个百分比都有一个参数。

所以在你的情况下:

String s = String.format("%-15s %5s %10s\n", "Item", "Qty", "Price");
String s1 = String.format("%-15s %5s %10s\n", "----", "---", "-----");
Run Code Online (Sandbox Code Playgroud)

您还需要行项目的格式字符串。从你的输出来看,这可能是:

"%-15s %5d %10.2f\n"
Run Code Online (Sandbox Code Playgroud)

(您可以将其用作:

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

如果您想截断超过 15 个字符的 itemName,您可以使用:

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