• 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

     

  • 相关阅读:
    C# Console.Read()和Console.ReadLine()的区别
    C#获取项目程序及运行路径的方法
    Thread理解
    ENVI 监督分类Max stdev from Mean 参数IDL中的设置
    C# 插件开发学习实例
    利用动软代码器自动生存三层架构
    结构体的对齐
    链表分类及应用
    指针
    双向循环链表
  • 原文地址:https://www.cnblogs.com/xdecode/p/7905041.html
Copyright © 2020-2023  润新知