0

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

4

2 回答 2

2

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

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

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

于 2010-12-01T20:14:53.190 回答
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 */
    }
}

不漂亮,诚然。

于 2009-04-26T21:50:15.433 回答