Java读取打印机自定义纸张.
2024-08-22 09:54:53
打印出现截断?
对于自定义纸张打印, 一定要先在打印机配置那边添加, 不然会出现截断.
例如打印1000*500, 出来是正常的, 打印216*139, 出现了截断.
因为java默认的打印, 会从打印机纸张里寻找相近的纸张进行匹配,
如果没有添加自定义纸张, 可能找出来的是别的纸张.
添加自定义纸张
分为两种
打印机支持直接自定义纸张设置
打开控制面板, 选择查看设备和打印机, 选中指定打印机, 右键打印机首选项.
在纸张规格后面可以直接添加自定义纸张.
打印机不支持直接设置
例如Windows自带的Microsoft XPS Document Writer, 右键打印机首选项里是没有自定义纸张的.
这时可以通过选中打印机, 点击菜单栏上方的打印机服务器属性, 勾选 创建新纸张规格. 最后记得要点 保存规格.
Java读取自定义纸张
通过java直接调用打印机, 弹出来打印机设置窗口, 里面有个选择打印机以及纸张的界面.
既然java自带的对话框里可以读到, 我们可以到他的源码里直接摘抄一下.
源码位于sun.print.ServiceDialog.
PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
Media[] objs = (Media[]) printer.getSupportedAttributeValues(Media.class, null, null);
for (Media obj : objs) {
if (obj instanceof MediaSizeName) {
System.out.println("纸张型号:" + obj);
} else if (obj instanceof MediaTray) {
System.out.println("纸张来源:" + obj);
}
}
log结果如下
注意: java读取纸张有个限制, 那就是默认纸张 高度 >= 宽度.
如果设置了100*50的纸张, 是读不到的, 因为他默认这个是50*100的横向展示.
若需要打印自定义纸张, 参加另外一篇博客 使用PDFBox打印自定义纸张的PDF
最新文章
- 二十七、JDK1.5新特性---Annotation
- Spring回调方法DisposableBean接口
- Storm TimeCacheMap RotatingMap源码分析
- 【BZOJ2456】mode 神奇的卡内存题
- SU suacor命令学习
- iOS企业应用Profile制作流程
- JavaScript总结3—对象
- Android学习之旅:五子棋
- WebSphere之wasprofile.sh使用
- VC调用Delphi对象接口
- mybatis支持jdk8等localdate类型
- Oracle 有排序的分页SQL写法
- 滚动公告--jq
- Python的paramiko,实现ssh
- Query - noConflict() 方法
- Flask-SQLAlchemy插件
- 求XF+闭包(第十一届河南省省赛真题)
- 用EntityFramework6连接MySQL【转】
- JAX-WS使用Handler实现简单的WebService权限验证
- PNPoly算法代码例子,判断一个点是否在多边形里面
热门文章
- 工具:Entity Framework Profiler
- Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)
- Xilinx ISE 14.1利用Verilog产生clock
- Being a Good Boy in Spring Festival(尼姆博弈)
- HDU 4118 Holiday's Accommodation(树形DP)
- git使用教程之git分支
- 蓝桥杯-算法训练--ALGO-4 结点选择
- HTML5与phonegap接口对比
- jQuery选择器(基本过滤选择器)第三节
- 淘宝联盟api调用笔记