Как печатать строки с разрывами строк в java

Мне нужно напечатать строку, используя java, поэтому я люблю следующее решение. Я сделал некоторые изменения, чтобы напечатать строку без отображения диалогового windows печати. Моя проблема заключается в том, что хотя этот метод правильно печатает строку, он не разбивает строки, как я определил. Скажите, пожалуйста, как печатать строки с разрывами строк.

public class PrintBill implements Printable { private static final String mText = "SHOP MA\n" + "----------------------------\n" + "Pannampitiya\n" + "09-10-2012 harsha no: 001\n" + "No Item Qty Price Amount\n" + "1 Bread 1 50.00 50.00\n" + "____________________________\n"; private static final AttributedString mStyledText = new AttributedString(mText); static public void main(String args[]) throws PrinterException { PrinterService ps = new PrinterService(); PrintService pss = ps.getCheckPrintService("Samsung-ML-2850D-2");//get the printer service by printer name PrinterJob printerJob = PrinterJob.getPrinterJob(); printerJob.setPrintService(pss); Book book = new Book(); book.append(new PrintBill(), new PageFormat()); printerJob.setPageable(book); try { printerJob.print(); System.out.println(printerJob.getPrintService().getName()); System.out.println("Print compleated.."); } catch (PrinterException exception) { System.err.println("Printing error: " + exception); exception.printStackTrace(); } @Override public int print(Graphics g, PageFormat format, int pageIndex) { Graphics2D g2d = (Graphics2D) g; g2d.translate(format.getImageableX(), format.getImageableY()); g2d.setPaint(Color.black); Point2D.Float pen = new Point2D.Float(); AttributedCharacterIterator charIterator = mStyledText.getIterator(); LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext()); float wrappingWidth = (float) format.getImageableWidth(); while (measurer.getPosition() < charIterator.getEndIndex()) { TextLayout layout = measurer.nextLayout(wrappingWidth); pen.y += layout.getAscent(); float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance()); layout.draw(g2d, pen.x + dx, pen.y); pen.y += layout.getDescent() + layout.getLeading(); } return Printable.PAGE_EXISTS; } } 

class обслуживания принтеров

 public class PrinterService { public PrintService getCheckPrintService(String printerName) { PrintService ps = null; DocFlavor doc_flavor = DocFlavor.STRING.TEXT_PLAIN; PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet(); attr_set.add(new Copies(1)); attr_set.add(Sides.ONE_SIDED); PrintService[] service = PrintServiceLookup.lookupPrintServices(doc_flavor, attr_set); for (int i = 0; i < service.length; i++) { System.out.println(service[i].getName()); if (service[i].getName().equals(printerName)) { ps = service[i]; } } return ps; } } 

Сделайте так:

 String newline = System.getProperty("line.separator"); private static final String mText = "SHOP MA" + newline + + "----------------------------" + newline + + "Pannampitiya" + newline + + "09-10-2012 harsha no: 001" + newline + + "No Item Qty Price Amount" + newline + + "1 Bread 1 50.00 50.00" + newline + + "____________________________" + newline; 

ОК, наконец, я нашел хорошее решение для моей задачи по выставлению счета, и он работает правильно для меня.

Этот class предоставляет службу печати

 public class PrinterService { public PrintService getCheckPrintService(String printerName) { PrintService ps = null; DocFlavor doc_flavor = DocFlavor.STRING.TEXT_PLAIN; PrintRequestAttributeSet attr_set = new HashPrintRequestAttributeSet(); attr_set.add(new Copies(1)); attr_set.add(Sides.ONE_SIDED); PrintService[] service = PrintServiceLookup.lookupPrintServices(doc_flavor, attr_set); for (int i = 0; i < service.length; i++) { System.out.println(service[i].getName()); if (service[i].getName().equals(printerName)) { ps = service[i]; } } return ps; } } 

Этот class демонстрирует задачу печати счета,

 public class HelloWorldPrinter implements Printable { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex > 0) { /* We have only one page, and 'page' is zero-based */ return NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D) graphics; g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); //the String to print in multiple lines //writing a semicolon (;) at the end of each sentence String mText = "SHOP MA;" + "Pannampitiya;" + "----------------------------;" + "09-10-2012 harsha no: 001 ;" + "No Item Qty Price Amount ;" + "----------------------------;" + "1 Bread 1 50.00 50.00 ;" + "----------------------------;"; //Prepare the rendering //split the String by the semicolon character String[] bill = mText.split(";"); int y = 15; Font f = new Font(Font.SANS_SERIF, Font.PLAIN, 8); graphics.setFont(f); //draw each String in a separate line for (int i = 0; i < bill.length; i++) { graphics.drawString(bill[i], 5, y); y = y + 15; } /* tell the caller that this page is part of the printed document */ return PAGE_EXISTS; } public void pp() throws PrinterException { PrinterService ps = new PrinterService(); //get the printer service by printer name PrintService pss = ps.getCheckPrintService("Deskjet-1000-J110-series-2"); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintService(pss); job.setPrintable(this); try { job.print(); } catch (PrinterException ex) { ex.printStackTrace(); } } public static void main(String[] args) { HelloWorldPrinter hwp = new HelloWorldPrinter(); try { hwp.pp(); } catch (Exception e) { e.printStackTrace(); } } } 
 private static final String mText = "SHOP MA" + "\n" + + "----------------------------" + "\n" + + "Pannampitiya" + newline + + "09-10-2012 harsha no: 001" + "\n" + + "No Item Qty Price Amount" + "\n" + + "1 Bread 1 50.00 50.00" + "\n" + + "____________________________" + "\n"; 

Это должно сработать.

 String newline = System.getProperty("line.separator"); System.out.println("First line" + newline); System.out.println("Second line" + newline); System.out.println("Third line"); 

Вы можете попробовать использовать StringBuilder : –

  final StringBuilder sb = new StringBuilder(); sb.append("SHOP MA\n"); sb.append("----------------------------\n"); sb.append("Pannampitiya\n"); sb.append("09-10-2012 harsha no: 001\n"); sb.append("No Item Qty Price Amount\n"); sb.append("1 Bread 1 50.00 50.00\n"); sb.append("____________________________\n"); // To use StringBuilder as String.. Use `toString()` method.. System.out.println(sb.toString()); 

Я думаю, вы делаете это слишком сложным. AttributedString используется, когда вы хотите хранить атрибуты – в контексте печати. Но вы храните в нем данные. AttributedString

Просто сохраните данные в объекте Document и передайте свойства, такие как Font, Bold, Italic все в AttributedString.

Надеюсь, это будет полезно . Быстрый учебник и углубленное руководство.

Используйте String buffer.

  final StringBuffer mText = new StringBuffer("SHOP MA\n" + "----------------------------\n" + "Pannampitiya\n" + "09-10-2012 harsha no: 001\n" + "No Item Qty Price Amount\n" + "1 Bread 1 50.00 50.00\n" + "____________________________\n"); 
 package test2; public class main { public static void main(String[] args) { vehical vehical1 = new vehical("civic", "black","2012"); System.out.println(vehical1.name+"\n"+vehical1.colour+"\n"+vehical1.model); } } 
  • Печать документа WPF FlowDocument
  • Как заставить браузеры печатать фоновые изображения в CSS?
  • Есть ли веская причина использовать «printf» вместо «print» в java?
  • Хорошие правила для настройки print css?
  • Смутно о __str__ в списке в Python
  • Печать без пробела в python 3
  • Как скрыть элемент при печати веб-страницы?
  • Как распечатать PDF на сетевом принтере по умолчанию с помощью команды оболочки GhostScript (gswin32c.exe)
  • CSS для установки формата бумаги A4
  • Написание виртуального принтера в .NET
  • Печать в новой строке, java
  • Давайте будем гением компьютера.