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

 

posted @ 2017-11-27 17:09  大道方圆  阅读(6488)  评论(2编辑  收藏  举报