パネルの内容をプリンタに出力する方法

・パネルの印刷メソッド


    /**
     * グラフを印刷する。
     */
    public void printAll(Frame frame, String title) {
        PrintJob pjob = getToolkit().getPrintJob(frame, title, null);
        if(pjob != null){
            // 用紙サイズを求める
            Dimension paperDim = pjob.getPageDimension();
            double paperWidth = paperDim.getWidth();
            double paperHeight = paperDim.getHeight();
            // プリンタの設定で用紙が横になっているときは、左マージンと上マージンを入れ替え
            if(paperWidth > paperHeight)
            {
                int temp = LEFT_MARGIN;
                LEFT_MARGIN = UP_MARGIN;
                UP_MARGIN = temp;
            }
            paperWidth -= LEFT_MARGIN;
            paperHeight -= UP_MARGIN;
            // パネルサイズを求める
            int panelWidth = panel.getSize().width;
            int panelHeight = panel.getSize().height;
            // オフスクリーンイメージを作成し、パネルの内容をコピーする
            Image image = createImage(panelWidth, panelHeight);
            Graphics graph = image.getGraphics();
            graph.setColor(Color.white);
            graph.fillRect(0, 0, image.getWidth(this), image.getHeight(this));
            panel.paint(graph);
            // 縮小率算出
            double wRatio = 1.0;
            double hRatio = 1.0;
            double ratio = 1.0;
            wRatio = paperWidth / panelWidth;
            hRatio = paperHeight / panelHeight;
            ratio = ( wRatio < hRatio ) ? wRatio : hRatio;
            if(ratio > 1.0) ratio = 1.0;
            // プリンタのグラフィックオブジェクト取得
            Graphics pg = pjob.getGraphics();
            if(pg != null){
                // 出力
                pg.drawImage(image, LEFT_MARGIN, UP_MARGIN, (int)(panelWidth * ratio), (int)(panelHeight * ratio), this);
                pg.dispose();
            }
            pjob.end();
        }
    }