Проблема с печатью квитанций Java Formatter

Я разрабатываю квитанцию ​​​​для печати на Java с использованием класса PrinterJob.

Мне нужен совет.

На основе примера, который я видел здесь.

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

Как сохранить вывод, приведенный в примере выше, в jTextPanel? Затем я распечатаю текстовое содержимое внутри jTextPanel, используя класс PrinterJob.

Я хочу получить следующий вывод, когда распечатываю текстовое содержимое внутри jTextPanel с моего POS-принтера.

введите здесь описание изображения

Ниже приведены коды, которые у меня есть до сих пор.

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();

Любые советы о том, как я могу действовать?


person Lawrence Wong    schedule 07.11.2014    source источник
comment
Ознакомьтесь с этим публикацией Stackoverflow. Ответ, который вы ищете, есть.   -  person hfontanez    schedule 07.11.2014
comment
Спасибо! Проверяю это   -  person Lawrence Wong    schedule 07.11.2014


Ответы (1)


Порядок, в котором вы передаете аргументы 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 символов, вы можете использовать:

// "%.15s %5d %10.2f\n"
String line = String.format("%.15s %5d %10.2f\n", itemName, quantity, price);
person Erwin Bolwidt    schedule 07.11.2014
comment
Как обрабатывать случаи, когда имя элемента очень длинное? - person Vivek Maskara; 19.02.2018
comment
Я добавил решение для этого в ответ. - person Erwin Bolwidt; 19.02.2018
comment
как мне перенести длинное имя элемента в несколько строк? - person Smith; 04.07.2019
comment
@Smith Затем вам нужно будет выплюнуть itemName самостоятельно в цикле for; каждая строка, кроме последней, имеет только 15-символьную часть itemName, а последняя также содержит количество и цену. Но если вы хотите красиво переносить строки, вам нужно сделать это на границах слов, за исключением случаев, когда слово уже длиннее 15 символов. - person Erwin Bolwidt; 04.07.2019