代码之家  ›  专栏  ›  技术社区  ›  Andrei Vajna II

我怎样才能得到要打印的总页数?

  •  1
  • Andrei Vajna II  · 技术社区  · 14 年前

    这是来自 Sun tutorial :

    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页。有什么方法可以获取这些信息吗?

    我需要这个来显示一个随着每页打印而增加的进度条,但为此我需要知道将要打印的总页数。

    那我怎么能拿到那个号码呢?

    1 回复  |  直到 12 年前
        1
  •  4
  •   Andrei Vajna II    14 年前

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