Java打印和打印预览机制实例代码


在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的图形用户界面和打印支持。