2016-04-11 4 views
1

J'essaie d'exporter des résultats avec java print/printdialog. Je veux imprimer des lignes multiples (en utilisant "\ n"), mais mon exportation est une simple ligne. Comment puis-je résoudre cette cause?Comment exporter du texte multiligne avec printdialog en java?

ici est mon exemple de code:

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.print.PageFormat; 
import java.awt.print.Printable; 
import java.awt.print.PrinterException; 
import java.awt.print.PrinterJob; 

public class PrintableDemo1 implements Printable { 

    public int print(Graphics g, PageFormat pf, int pageIndex) { 


    StringBuilder builder = new StringBuilder(); 
    builder.append("Test Result:").append("\n") 
    .append("First Line").append("\n") 
      .append("Second Line").append("\n") 
      .append("Third Line").append("\n") 
      .append("Fourth Line").append("\n") 
      .append("Last Line"); 


    if (pageIndex != 0) 
     return NO_SUCH_PAGE; 

    Graphics2D g2 = (Graphics2D) g; 
    g2.setFont(new Font("Serif", Font.PLAIN, 12)); 
    g2.setPaint(Color.black); 
    g2.drawString(builder.toString(), 144, 144); 
    return PAGE_EXISTS; 
    } 

    public static void main(String[] args) { 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setPrintable(new PrintableDemo1()); 

    try { 
     pj.print(); 
    } catch (PrinterException e) { 
     e.printStackTrace(); 
    } 

    } 

} 
+0

* « Je veux imprimer des lignes multiples (avec l'aide de « \ n ») » * - Vous ne pouvez pas, ce n'est pas comment fonctionne 'drawString', vous devrez dessiner chaque ligne individuellement – MadProgrammer

+0

[Dessin Multiple Lignes de texte] (http://docs.oracle.com/javase/tutorial/2d/text/drawmulstring.html) peut être plus compliqué que nécessaire, mais c'est une bonne référence;) – MadProgrammer

+0

Si vous êtes vraiment courageux [ Voici un exemple] (http://stackoverflow.com/questions/14007041/awt-eventqueue-0-java-lang-nullpointerexception/14007091#14007091) – MadProgrammer

Répondre

0

Merci à @MadProgrammer j'ai trouvé une solution et mettre à jour mon code.

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.print.PageFormat; 
import java.awt.print.Printable; 
import java.awt.print.PrinterException; 
import java.awt.print.PrinterJob; 

public class PrintableDemo1 implements Printable { 

    public int print(Graphics g, PageFormat pf, int pageIndex) { 

    StringBuilder builder = new StringBuilder(); 
    builder.append("Test Result:").append("\n") 
    .append("First Line").append("\n") 
      .append("Second Line").append("\n") 
      .append("Third Line").append("\n") 
      .append("Fourth Line").append("\n") 
      .append("Last Line"); 

    if (pageIndex != 0) 
     return NO_SUCH_PAGE; 

    Graphics2D g2 = (Graphics2D) g; 
    g2.setFont(new Font("Serif", Font.PLAIN, 12)); 
    g2.setPaint(Color.black); 
    myDrawString(g2, builder.toString(), 100, 100); 

    return PAGE_EXISTS; 
    } 

    private void myDrawString(Graphics g, String text, int x, int y) { 
     for (String line : text.split("\n")) 
     g.drawString(line, x, y += g.getFontMetrics().getHeight()); 
    } 

    public static void main(String[] args) { 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setPrintable(new PrintableDemo1()); 

    try { 
     pj.print(); 
    } catch (PrinterException e) { 
     e.printStackTrace(); 
    } 

    } 

}