java实现打印功能并控制打印方向

来源:互联网 发布:汇顶科技 待遇知乎 编辑:程序博客网 时间:2024/05/24 01:42

本文主要参考了Brett Spell 的文章:Java Pro Programming: Printing


  • 主要的打印步骤有如下四点:

    1.定义打印机,限制那些返回到提供你要实现功能的函数的列表。打印服务实现了PrintService接口。

    2.通过调用接口中定义的createPrintJob()方法创建一个打印事件,作为DocPrintJob的一个实例。

    3.创建一个实现Doc接口的类来描述你想要打印的数据 , 你也可以创建一个PrintRequestAttributeSet的实例来定义你想要的打印选项。

    4.通过DocPrintJob接口定义的printv()方法来初始化打印,指定你先前创建的Doc,指定PrintRequestAttributeSet或者设为空值。

    • 说java话就是:
PrintService service = PrintServiceLookup.lookupDefaultPrintService();DocPrintJob job = service.createPrintJob();URL url = new URL(   "http://www.apress.com/ApressCorporate/supplement/1/421/bcm.gif ");DocFlavor flavor = DocFlavor.URL.GIF;Doc doc = new SimpleDoc(url, flavor, null);PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();attrs.add(new Copies(2));job.print(doc, attrs); 

这里要说明的有以下几点:

  • PrintServiceLookup方法用于寻找打印服务,也可以指定AttributesDocFlavor用于寻找打印服务。但java不提供判断打印机是否在线的功能(至少我没发现,有知道的童鞋可以指教以下)。

  • DocFlavor方法用于选择匹配所需打印对象的属性,例如jpg、bmp和来源等。

  • AttributeSet方法,其实就是打印属性的设置,其实在一个打印过程中子接口有四个,其对应的实现类也有四个(貌似有5个,一个是总类)。详细见连接。这里需要提一下需要这么多打印属性设置接口的原因:

    a. 包含 DocAttribute 的 DocAttributeSet 指定单个文档的特征和应用到单个文档的打印作业的设置。

    b. 包含 PrintRequestAttribute 的 PrintRequestAttributeSet 指定应用到整个打印作业和打印作业中的所有文档的设置。

    c. 包含 PrintJobAttribute 的 PrintJobAttributeSet 报告打印作业的状态。

    d. 包含 PrintServiceAttribute 的 PrintServiceAttributeSet 报告 Print Service 实例的状态。

    可见这里有四个是需要使用在不同的应用场合和配合不同需求的。

    • 控制打印方向:用于控制打印方向的设置就在这些属性中。首先讲一下这些属性的使用方法:其实也很简单,就是在实例化之后,直接.add();就可以了。例如实例化后实现控制打印方向和彩打支持:

      DocAttributeSet attrs = new HashDocAttributeSet();
      attrs.add(OrientationRequested.PORTRAIT);
      attrs.add(ColorSupported.SUPPORTED);


    • 而print所支持的所有序列化字段都在该序列化表格链接中可以找到。至于为什么需要序列化这一步,粗略可以理解为:

      把对象转换为字节序列的过程称为对象的序列化。

      把字节序列恢复为对象的过程称为对象的反序列化。

      对象的序列化主要有两种用途:

      1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

      2) 在网络上传送对象的字节序列。

      有兴趣的朋友,可以翻看这篇详细讲解序列化与反序列化的文章:Java基础学习总结——Java对象的序列化和反序列化

  • 最后一步就是打印了,打印的时候会包含文档和属性。

0 0
原创粉丝点击