如何从Java.awt.print.PrinterJob获取PageFormat

时间:2009-04-26 18:13:23

标签: java swing printing dimensions

我正在尝试使用PageFormat信息在打印之前修改基于javax.swing的打印输出。我对如何从PrintJob(使用getPrinterJob()和printDialog()获得)获取PageFormat感到难过。我知道有getPageFormat方法,但我无法弄清楚如何获取PrintRequestAttributeSet(不是printJob.getPrintService()。getPrintAttributes())。老实说,我真正想知道的是页面的宽度和高度。有关如何做到这一点的任何想法?感谢。

2 个答案:

答案 0 :(得分:2)

运行“假”打印作业的方法不起作用,至少从长远来看是这样。我尝试过这个。起初效果很好......然后一些客户开始报告奇怪的行为。

事实证明,使用一些打印机和一些配置,即使是“假”作业也会导致打印机活动。没有打印文档页面,但是队列活动,作业标题页面,有时还有一些垃圾输出(我记得)。虚假队列条目足以干扰正常打印,在某些情况下,会使用户感到困惑。

是的,提前获取PageFormat是一件痛苦的事。

答案 1 :(得分:0)

如果您只需要页面宽度和高度,我认为PageFormat.getImageableWidth()和 您正在寻找PageFormat.getImageableHeight()。

对不起,那不是你想要的。这对于黑客来说如何:

printable.setFakeJob(true);
job.print();
printable.setFakeJob(false);
job.print();

并在您的可打印中,

public int print(Graphics graphics, PageFormat pf, int pageIndex) {
    if (isFakeJob()) {
        /* use passed-in PageFormat to set up whatever you need to set up */
        return NO_SUCH_PAGE;
    } else {
        /* do your actual printing */
    }
}

不可否认。