首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取要打印的总页数?

如何获取要打印的总页数?
EN

Stack Overflow用户
提问于 2010-09-13 23:04:14
回答 1查看 6.2K关注 0票数 1

这是来自Sun tutorial的基本打印程序示例

代码语言:javascript
运行
复制
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 */
    }
}

当用户看到print对话框(在第二行)时,他可以选择仅打印文档中的一定范围的页面。我能以某种方式获得要打印的页数吗?例如,如果我有一个25页的文档,但用户选择打印范围4-10,那么将只打印7页。有什么方法可以获取这些信息吗?

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

那么我怎么才能得到这个数字呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-15 19:33:39

我设法找到了一个解决方案。

printDialog()方法显示本机print对话框,而printDialog(PrintRequestAttributeSet attributes)方法显示跨平台对话框。PrintRequestAttributeSet参数使用用户的选择进行填充,包括选择要打印的页面范围。因此,从printDialog方法返回后,可以查询页面范围,如以下代码序列所示:

代码语言:javascript
运行
复制
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。计算总页数很简单:

代码语言:javascript
运行
复制
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范围,但比遗憾更安全。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3701644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档