在Java中,打印和打印预览通常涉及到`java.awt.print`包下的类,特别是`PrinterJob`和`Printable`接口。下面是一个简单的示例,展示了如何创建一个可以打印文本和进行打印预览的Java程序。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
public class PrintAndPreviewExample extends JFrame implements Printable, ActionListener {
public PrintAndPreviewExample() {
super("打印和打印预览示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 200);
JButton printButton = new JButton("打印");
JButton previewButton = new JButton("打印预览");
printButton.addActionListener(this);
previewButton.addActionListener(this);
JPanel panel = new JPanel();
panel.add(printButton);
panel.add(previewButton);
add(panel, BorderLayout.CENTER);
}
@Override
public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
// 假设我们要打印的内容是一个字符串
String text = "Hello, this is a print example!";
Font font = new Font("Serif", Font.PLAIN, 12);
g2d.setFont(font);
FontMetrics fm = g2d.getFontMetrics();
int x = 0;
int y = fm.getAscent();
g2d.drawString(text, x, y);
return PAGE_EXISTS;
}
@Override
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
if (e.getActionCommand().equals("打印预览")) {
boolean doPrint = job.printDialog();
if (doPrint) {
try {
job.printPreview();
} catch (PrinterException ex) {
// 处理打印异常
ex.printStackTrace();
}
}
} else if (e.getActionCommand().equals("打印")) {
boolean doPrint = job.printDialog();
if (doPrint) {
try {
job.print();
} catch (PrinterException ex) {
// 处理打印异常
ex.printStackTrace();
}
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
PrintAndPreviewExample example = new PrintAndPreviewExample();
example.setVisible(true);
});
}
}
这个示例创建了一个包含两个按钮的窗口:“打印”和“打印预览”。点击“打印”按钮会打开打印对话框,允许用户选择打印机并开始打印过程。点击“打印预览”按钮则会显示打印预览对话框,用户可以在其中查看打印效果。
`Printable`接口的实现方法`print`用于定义如何绘制页面上的内容。在这个例子中,我们简单地打印了一个字符串。
请注意,由于环境限制,这里的代码示例是在标准Java Swing应用程序中实现的,并且假定您的开发环境已正确配置了Java的图形用户界面和打印支持。