1

I am trying to export some results with java print/ printdialog. I want to print multi lines (with using "\n"), but my export is simple line. How can i resolve this cause?

here is my code sample:

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

  }

}
enes
  • 95
  • 2
  • 9
  • *"I want to print multi lines (with using "\n")"* - You can't, that's not how `drawString` works, you will need to draw each line individually – MadProgrammer Apr 11 '16 at 06:53
  • [Drawing Multiple Lines of Text](http://docs.oracle.com/javase/tutorial/2d/text/drawmulstring.html) might be more complicated then you need, but it's a good reference ;) – MadProgrammer Apr 11 '16 at 06:54
  • If you're really brave [here's an example](http://stackoverflow.com/questions/14007041/awt-eventqueue-0-java-lang-nullpointerexception/14007091#14007091) – MadProgrammer Apr 11 '16 at 06:58
  • Or a slightly [simpler example](http://stackoverflow.com/questions/14702969/canvas-fillrect-not-filling-defined-canvas/14704400#14704400) using font metrics (prints two lines, one after the other) – MadProgrammer Apr 11 '16 at 07:00
  • Or even [something like this](http://stackoverflow.com/questions/20794285/creating-a-string-inside-a-rectangle/20794440#20794440) – MadProgrammer Apr 11 '16 at 07:01
  • @MadProgrammer God Bless you :) it's fine and works, i will update my code. thnaks for reply. – enes Apr 11 '16 at 07:31

1 Answers1

0

Thanks to @MadProgrammer i found some solution, and update my 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();
    }

  }

}
enes
  • 95
  • 2
  • 9