打印出现截断?


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

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

最新文章

  1. 二十七、JDK1.5新特性---Annotation
  2. Spring回调方法DisposableBean接口
  3. Storm TimeCacheMap RotatingMap源码分析
  4. 【BZOJ2456】mode 神奇的卡内存题
  5. SU suacor命令学习
  6. iOS企业应用Profile制作流程
  7. JavaScript总结3—对象
  8. Android学习之旅:五子棋
  9. WebSphere之wasprofile.sh使用
  10. VC调用Delphi对象接口
  11. mybatis支持jdk8等localdate类型
  12. Oracle 有排序的分页SQL写法
  13. 滚动公告--jq
  14. Python的paramiko,实现ssh
  15. Query - noConflict() 方法
  16. Flask-SQLAlchemy插件
  17. 求XF+闭包(第十一届河南省省赛真题)
  18. 用EntityFramework6连接MySQL【转】
  19. JAX-WS使用Handler实现简单的WebService权限验证
  20. PNPoly算法代码例子,判断一个点是否在多边形里面

热门文章

  1. 工具:Entity Framework Profiler
  2. Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)
  3. Xilinx ISE 14.1利用Verilog产生clock
  4. Being a Good Boy in Spring Festival(尼姆博弈)
  5. HDU 4118 Holiday's Accommodation(树形DP)
  6. git使用教程之git分支
  7. 蓝桥杯-算法训练--ALGO-4 结点选择
  8. HTML5与phonegap接口对比
  9. jQuery选择器(基本过滤选择器)第三节
  10. 淘宝联盟api调用笔记