Java读取打印机自定义纸张.

时间:2022-04-24
本文章向大家介绍Java读取打印机自定义纸张.,主要内容包括打印出现截断?、添加自定义纸张、打印机不支持直接设置、Java读取自定义纸张、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

打印出现截断?

对于自定义纸张打印, 一定要先在打印机配置那边添加, 不然会出现截断.

例如打印1000*500, 出来是正常的, 打印216*139, 出现了截断.

因为java默认的打印, 会从打印机纸张里寻找相近的纸张进行匹配,

如果没有添加自定义纸张, 可能找出来的是别的纸张.

添加自定义纸张

分为两种

打印机支持直接自定义纸张设置

打开控制面板, 选择查看设备和打印机, 选中指定打印机, 右键打印机首选项.

在纸张规格后面可以直接添加自定义纸张.

打印机不支持直接设置

例如Windows自带的Microsoft XPS Document Writer, 右键打印机首选项里是没有自定义纸张的.

这时可以通过选中打印机, 点击菜单栏上方的打印机服务器属性, 勾选 创建新纸张规格. 最后记得要点 保存规格.

Java读取自定义纸张

通过java直接调用打印机, 弹出来打印机设置窗口, 里面有个选择打印机以及纸张的界面.

既然java自带的对话框里可以读到, 我们可以到他的源码里直接摘抄一下.

源码位于sun.print.ServiceDialog.

1         PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
2         Media[] objs = (Media[]) printer.getSupportedAttributeValues(Media.class, null, null);
3         for (Media obj : objs) {
4             if (obj instanceof MediaSizeName) {
5                 System.out.println("纸张型号:" + obj);
6             } else if (obj instanceof MediaTray) {
7                 System.out.println("纸张来源:" + obj);
8             }
9         }

 log结果如下

 注意: java读取纸张有个限制, 那就是默认纸张 高度 >= 宽度.

如果设置了100*50的纸张, 是读不到的, 因为他默认这个是50*100的横向展示.

若需要打印自定义纸张, 参加另外一篇博客 使用PDFBox打印自定义纸张的PDF