import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;

public class FontDemo {
    static Frame frame;
    static PrintableCanvas canvas;
    static class PrintableCanvas extends Canvas implements Printable {
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D)g;
            Font f = new Font("Webdings", Font.PLAIN, 14);
            //Font f = new Font("Arial", Font.BOLD, 14);
            g2.setFont(f);
            //g2.drawString((new String(Character.toChars(0x1F467)))+"qwertyuiop", 15, 20);
            g2.drawString("qwertyuiop", 15, 20);
            g2.drawString("asdfghjkl;'", 15, 40);
            g2.drawString("zxcvbnm,./", 15, 60);
        }
        public int print(Graphics g, PageFormat pf, int pageIndex)
                  throws PrinterException {
            if (pageIndex >= 1) {
                return Printable.NO_SUCH_PAGE;
            }

            Graphics2D g2 = (Graphics2D)g;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            paint(g);

            return Printable.PAGE_EXISTS;
        }
    }
    public static void main(String args[]) {
        try{
            EventQueue.invokeAndWait( new Runnable() {
                public void run() {
                    canvas = new PrintableCanvas();
                    frame = new Frame("frame");
                    frame.setBounds(50,50, 300, 400);
                    frame.add(canvas);
                    frame.addKeyListener( new KeyAdapter() {
                        public void keyTyped(KeyEvent ke) {
                            if(ke.getKeyChar() == 'p') {
                                System.out.println("now print");
                                PrinterJob job = PrinterJob.getPrinterJob();
                                job.setPrintable(canvas);
                                try {
                                    job.print();
                                }catch(PrinterException pex) {
                                    System.err.println(pex);
                                }    
                            }
                        }
                    });
                    frame.setVisible(true);
                }
            });
        }catch(Exception ex) {}
    }
}
