我编写了一个程序,它使用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());
}
}
}
我做错了什么?
答案 0 :(得分:4)
您可以尝试添加这段代码并重新运行:
Book book = new Book();//java.awt.print.Book
book.append(this, pf);
job.setPageable(book);
而不是
job.setPrintable(this);
答案 1 :(得分:2)
我的多页示例(结果只打印了第一页),本书对我不起作用,但它给了我另一个想法。而不是:
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将仅对第二页和更多页面产生影响或根本没有任何影响。
无论如何,多亏你们俩。