如何用Java打印整个JPanel

时间:2014-06-05 22:22:49

标签: java swing graphics printing

我正在尝试打印应用程序中的JPanel,应用程序内的JPanel显示在下面(注意水平和垂直滚动条):

The Application 当应用程序运行时,面板的高度变得很长, 但是当我打印它时,它不会打印整个宽度和高度。

面板在纸张中的定位也与左侧而不是中心对齐。 下面的图片显示了面板在纸上的显示方式,这看起来非常糟糕,所以我需要帮助。

1)如何打印整个面板?

2)我如何将其定位在纸上集中?

The Paper

这是我的代码:

public void printWork()
{
    PrinterJob pj = PrinterJob.getPrinterJob();
    pj.setJobName(" Opt De Solver Printing ");

    pj.setPrintable(new Printable()
    {
        @Override
        public int print(Graphics pg, PageFormat pf, int pageNum)
        {
            if(pageNum > 0)
                return Printable.NO_SUCH_PAGE;

            Graphics2D g2 = (Graphics2D)pg;
            g2.translate(pf.getImageableX(), pf.getImageableY());
            MainAppPanel.this.paintAll(g2);
            /* I've tried the following commented codes but they don't work */
            //MainAppPanel.this.printAll(g2);
            //MainAppPanel.this.print(g2);
            //MainAppPanel.this.print(g2);
            return Printable.PAGE_EXISTS;
        }
    });
    if(pj.printDialog() == false)
        return;
    try
    {
        pj.print();
    }
    catch(PrinterException xcp)
    {
        xcp.printStackTrace(System.err);
    }
}

1 个答案:

答案 0 :(得分:0)

我知道现在已经晚了3年但是参考:

将图像定位到您已定义到左上角的页面上: g2.translate(pf.getImageableX(),pf.getImageableY());

所以,如果你想得到100分右边的150分,那么你可以做到:

g2.translate(pf.getImageableX()+ 100,pf.getImageableY()+ 150);

此外,如果您想缩放图像以便更好地使用它:

g2.scale(1,1);

其中1表示100%,0.5表示50%,1.5表示150%