首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java读取打印机自定义纸张.

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

作者头像
用户1216491
发布2018-01-24 16:01:42
2.3K0
发布2018-01-24 16:01:42
举报
文章被收录于专栏:xdecodexdecode

打印出现截断?

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

例如打印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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打印出现截断?
  • 添加自定义纸张
    • 打印机支持直接自定义纸张设置
      • 打印机不支持直接设置
      • Java读取自定义纸张
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档