如何在java中使用printdialog导出多行文本?
我正在尝试使用java打印/打印对话框导出一些结果。我想打印多行(使用“\n”),但我的导出是简单行。我如何解决这个问题 以下是我的代码示例:如何在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.
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
的工作方式,您将需要单独绘制每行,这可能比您需要的更复杂,但这是一个很好的参考;)如果你真的很勇敢或有点使用字体度量(打印两行,一行接一行),甚至