Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用printdialog导出多行文本?_Java_Printing_Jframe_Printdialog - Fatal编程技术网

如何在java中使用printdialog导出多行文本?

如何在java中使用printdialog导出多行文本?,java,printing,jframe,printdialog,Java,Printing,Jframe,Printdialog,我正在尝试使用java打印/打印对话框导出一些结果。我想打印多行(使用“\n”),但我的导出是简单行。我如何解决这个问题 以下是我的代码示例: 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.

我正在尝试使用java打印/打印对话框导出一些结果。我想打印多行(使用“\n”),但我的导出是简单行。我如何解决这个问题

以下是我的代码示例:

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

  }

}

感谢@MadProgrammer,我找到了一些解决方案,并更新了代码

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

  }

}

感谢@MadProgrammer,我找到了一些解决方案,并更新了代码

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

  }

}
“我想打印多行(使用“\n”)”-您不能,这不是
drawString
的工作方式,您需要单独绘制每行,可能比您需要的更复杂,但这是一个很好的参考;)如果您真的很勇敢,或者稍微使用字体度量(一行接一行地打印两行),甚至“我想打印多行(使用“\n”)”-您不能,这不是
drawString
的工作方式,您将需要单独绘制每行,这可能比您需要的更复杂,但这是一个很好的参考;)如果你真的很勇敢或有点使用字体度量(打印两行,一行接一行),甚至