我正在设计一个使用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();
有关如何进行的任何建议?
答案 0 :(得分:4)
将参数传递给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);
)
如果你想要截断你的itemName超过15个字符,你可以使用:
// "%.15s %5d %10.2f\n"
String line = String.format("%.15s %5d %10.2f\n", itemName, quantity, price);