2

我编写了一个程序,它使用 Java 打印 API 从打印机打印页面。我相信我已经输入了将页面大小设置为字母的代码,但它仍然会以打印机的默认大小打印。这是我的printPage()方法:

public void printPage() {
    getTot();
    PrinterJob job = PrinterJob.getPrinterJob();
    PageFormat pf = job.defaultPage();
    Paper paper = pf.getPaper();
    paper.setSize(8.5 * 72, 11 * 72);
    paper.setImageableArea(0.5 * 72, 0.0 * 72, 7.5 * 72, 10.5 * 72);
    pf.setPaper(paper);
    job.setPrintable(this);
    boolean ok = job.printDialog();
    if (ok) {
        if (cov)
            try {
                for (j = 0; j < printPaths.size(); j++)
                    job.print();
                cov = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
        if (summ)
            try {
                job.print();
                summ = false;
            } catch (PrinterException ex) {
                System.out.println(ex.getMessage());
            }
    }

}

我究竟做错了什么?

4

2 回答 2

4

您可以尝试添加这段代码并重新运行:

Book book = new Book();//java.awt.print.Book
book.append(this, pf);
job.setPageable(book);

代替

job.setPrintable(this);
于 2011-11-29T17:20:16.607 回答
3

Book 对我的多页示例不起作用(结果是只打印了第一页),但它给了我另一个想法。代替 :

Book book = new Book();//java.awt.print.Book
book.append(this, pf);
job.setPageable(book);

我尝试了另一种重载方法,它适用于所有页面:

PageFormat pf = job.defaultPage();
pf.setPaper(paper);
job.setPrintable(this, pf);

如果您想要自定义纸张大小,则需要将其作为参数转发给 print 方法(Java 将为您执行此操作,但您必须将其传递给 setPrintable 方法)。在方法开始执行后更改 PaperFormat 只会对第二页和以后的页面产生影响,或者根本没有任何影响。

不管怎样,谢谢你们俩。

于 2013-07-05T13:57:43.747 回答