[英]How can I get the total number of pages to be printed?
這是Sun教程中的基本打印程序示例:
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new HelloWorldPrinter());
boolean doPrint = job.printDialog();
if (doPrint) {
try {
job.print();
} catch (PrinterException e) {
/* The job did not successfully complete */
}
}
當用戶顯示打印對話框(在第二行)時,他可以選擇僅打印文檔中的一系列頁面。 我可以以某種方式獲得要打印的頁數嗎? 例如,如果我有25頁文檔,但用戶選擇打印范圍4-10,則只打印7頁。 有什么方法可以訪問這些信息嗎?
我需要這個以顯示隨每頁打印而增加的進度條,但為此我需要知道將要打印的頁面總數。
那我怎么能得到那個號碼呢?
我設法找到了解決方案。
printDialog()
方法顯示本機打印對話框,但printDialog(PrintRequestAttributeSet attributes)
方法顯示跨平台對話框。 PrintRequestAttributeSet
參數使用用戶的選擇填寫,包括選擇要打印的頁面范圍。 因此,從printDialog
方法返回后,可以查詢頁面范圍,如下面的代碼序列:
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new HelloWorldPrinter());
HashPrintRequestAttributeSet printParams = new HashPrintRequestAttributeSet();
boolean ok = job.printDialog(printParams);
if (ok) {
PageRanges pageRanges = (PageRanges) printParams.get(PageRanges.class);
int pagesToBePrinted = getNumberOfPages(pageRanges);
try {
job.print(printParams);
} catch (PrinterException e) {
/* The job did not successfully complete */
}
}
請注意, printParams
也必須提供給print()
方法。 從PageRanges
對象,頁面范圍可以以數組格式獲得,即1個長度數組的數組,每個數組意味着單個頁面,或者2個長度數組意味着連續的頁面范圍。 有關更多詳細信息,請參閱javadoc 。 計算總頁數非常簡單:
int getNumberOfPages(PageRanges pageRanges) {
int pages = 0;
int[][] ranges = pageRanges.getMembers();
for (int i = 0; i < ranges.length; i++) {
pages += 1;
if (ranges[i].length == 2) {
pages += ranges[i][1] - ranges[i][0];
}
}
pages = Math.min(pages, totalPagesOfDocument);
return pages;
}
如果用戶沒有選擇頁面范圍,而是選擇“所有頁面”選項,則PageRanges
將包含范圍(1,Integer.MAX_VALUE)。 所以我說如果計算出的值超過了文檔的頁數,那么要打印的頁數就是文檔頁面的總數(我希望你從某個地方知道)。
該算法可能過度,因為PageRanges
可能只是一個簡單的n - m范圍,但比抱歉更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.