我设法找到了解决方案.

printDialog()方法显示本机打印对话框,但printDialog(PrintRequestAttributeSet属性)方法显示跨平台对话框.使用用户的选择填写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范围,但比抱歉更安全.

java获取总页数_java – 如何获得要打印的总页数?相关推荐

  1. java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)

    JAVA/JSP学习系列之六(MySQL翻页例子) 更新时间:2006年10月13日 00:00:00   作者: 一.运行前准备 下载了mysql的jdbc驱动(一个jar文件)并加载在CLASSP ...

  2. java获取当前年月日历_java万年历,获取该年月日历表

    这篇文章主要介绍了java获取对应年月分日历表有需要的朋友可以来参考下 这篇文章应用java技术输入年份和月份获取该年月日历表,下面通过一段代码给大家做展示: 输入年份和月份,打印出这个月的日历表 1 ...

  3. java 获取当前月日_Java获取当前时间年月日的方法

    本文实例为大家分享了java获取当前时间年月日的具体代码,供大家参考,具体内容如下 import java.text.ParseException; import java.text.SimpleDa ...

  4. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  5. java获取当前日期 星期几_java获取当前日期是星期几的方法

    java获取当前日期是星期几的方法 发布时间:2020-06-29 11:16:15 来源:亿速云 阅读:133 作者:Leah 本篇文章为大家展示了java获取当前日期是星期几的方法,代码简明扼要并 ...

  6. java 获取下一年_JAVA获取下一年,下个月,下一天;月份为何以0开始?

    JAVA获取下一年,下个月,下一天:月份为何以0开始? JAVA获取下一年,下个月,下一天:月份为何以0开始? 活不多说,直接上代码: public static void main(String[] ...

  7. java 获取日期格式化时间_java获取当前时间并格式化

    java获取当前时间并格式化 private static final DateTimeFormatter FORMAT_FOURTEEN = DateTimeFormatter.ofPattern( ...

  8. java获取字符的编码_java获取文本文件字符编码的方法

    java获取文本文件字符编码的方法 发布时间:2020-06-16 09:56:08 来源:亿速云 阅读:386 作者:Leah 这篇文章将为大家详细讲解有关java获取文本文件字符编码的方法,小编觉 ...

  9. java 获取json的值_Java如何获取JSON数据中的值

    场景:在接口自动化场景中,下个接口发送的请求参数,依赖上个接口请求结果中的值.需要将获取值作为全局参数引用. import java.io.File; import java.io.FileInput ...

最新文章

  1. Keepalived Nginx 高可用性配置
  2. mysql正在加载_本地坏境或者服务器环境下phpmyadmin出现始终正在加载问题的解决方法...
  3. Keras【Deep Learning With Python】keras框架下的MNIST数据集训练及自己手写数字照片的识别(分类神经网络)
  4. python 可变参数 关键字参数_Python关键字及可变参数*args,**kw原理解析
  5. 细节优化提升资源利用率
  6. BugkuCTF-Misc:Linux
  7. 【原创】mysql数据库异常:data truncate for column “*” at row *;data too long *。原因,及解决。...
  8. 工作58:element三级列表的问题
  9. 让计算机等待的函数_第56p,装饰器,闭包函数的应用
  10. jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等...
  11. js 判断 ““,null,undefined
  12. 活动报名 | 苏州工业园区领军人才项目申报宣讲对接会
  13. skynet源码阅读7--死循环检测
  14. 将 MySQL 数据库恢复到某个时间点
  15. 学习笔记——直流电机调速器
  16. sqlmap自动化注入工具使用浅析
  17. Python 猴子补丁
  18. 物体尺寸测量-matlab
  19. 第1节 基本数据类型分析
  20. linux获取android界面,Android中 adb shell ps 查看手机中进程信息

热门文章

  1. goodsync文件服务器,GoodSync Enterprise Server Windows服务器版
  2. vivox7android9,vivox9和x7哪个好 vivox9和x7区别对比
  3. android给view的overlay添加bitmap
  4. 美容院在短信平台的应用指南
  5. DDCTF2018逆向 黑盒
  6. 各平台爆款产品清单大合集!年底冲刺看这里!
  7. 华为荣耀服务器浏览网页卡,华为荣耀6PLUS手机信号很好但是网速很慢的解决办法...
  8. 国仁网络资讯:快手小店通投放转化效果怎么样;快手小店通的优势好处有什么。
  9. SIMATIC Net介绍
  10. “通信”千万条,安全第一条 — SIMATIC WinCC 安全通信技术分享