2011-11-29 116 views
2

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

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

你能尝试添加这段代码并重新运行:

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

,而不是

job.setPrintable(this); 
+0

哇。这是完美的。它甚至现在打印速度更快!你能解释一下吗? – SaintWacko

+0

很高兴为你工作:),它提供了你的页面可以有不同的页面格式的功能,我相信你可以提供不同的页面不同的格式,虽然我从来没有用过它:)。 – mprabhat

+0

啊,好的。那么它工作得很好,谢谢你的帮助。 – SaintWacko

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); 

如果你想自定义纸张尺寸,您需要将其转发给打印方法作为参数(哪个Java将为你做,但你必须通过它setPrintable方法)。在方法开始执行后更改PaperFormat仅对第二页和其他页面有效,或根本没有任何效果。

无论如何,感谢你们俩。

+0

在执行打印作业之前,在设置页面格式之前,不会对单页文档产生任何影响 – GameDroids

相关问题