2011-11-29 152 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

相關問題