簡體   English   中英

如何獲得要打印的總頁數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM