2012-10-09 14 views
6

Necesito imprimir una cadena usando java, así que me gusta la siguiente solución Después de googlear mucho. He hecho algunos cambios para imprimir la cadena sin mostrar el cuadro de diálogo de impresión. Mi problema es que aunque este método imprime la cadena correctamente, no rompe las líneas como he definido. Por favor dígame cómo imprimir cadenas con saltos de línea.Cómo imprimir cadenas con saltos de línea en java

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; 
    } 
} 

servicio de impresión que proporciona la clase

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; 
    } 
} 
+1

¿Has probado '\ r \ n' en lugar de' \ n'? – Keppil

+0

Intenta usar 'StringBuilder' y utiliza el método' append'. –

+0

@ Keppil - no está funcionando. – Harsha

Respuesta

4

bien, finalmente he encontrado una buena solución para mi tarea de impresión de facturas y de que funciona correctamente para mí.

Esta clase proporciona el servicio de impresión

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; 
    } 
} 

Esta clase demuestra la tarea impresión de facturas,

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

Do esta manera: -

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; 
+1

esto tampoco está funcionando. – Harsha

+0

Esto funciona para la impresión en línea, pero no cuando se envía a una impresora. – KimvdLinde

-1

búfer Uso de cadena.

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"); 
+0

"AttributedString mStyledText" requiere una cadena – Harsha

+0

esto no está funcionando – Harsha

0

Usted puede intentar usar 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()); 
+0

esto no es obvio – Harsha

+0

@Harsha ...: (... –

+0

@Harsha ¿Qué problema estás enfrentando? –

0

Creo que está haciendo que sea demasiado complejo. AttributedString se usa cuando desea almacenar atributos: en contexto de impresión. Pero está almacenando datos dentro de eso. AttributedString

Simplemente, almacene sus datos en el objeto Document y pase propiedades como Font, Bold, Italic todo en AttributedString.

la esperanza que esto sea útil A quick tutorial Y In depth tutorial

1
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"; 

esto debería funcionar.

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