集萃丝印特印网 版权所有 Copyright©2003-2022 ccedwy.com. All Rights Reserved
丝印特印网
【集萃网观察】无论采用哪种语言来开发应用系统,打印功能总是少不了的。为了节省Java程序开发人员的工作量,在Java语言中专门提供了一个PrinterJob类来帮助开发人员实现打印控制的功能。
本文将给大家介绍一下如何使用PrintJob类来实现打印作业。
一、PrinterJob类的功能。
在Java语言中,实现打印控制的类也很多。但是笔者比较倾向于使用这个PrintJob类。它是在Java语言中控制打印作业的主要类。开发人员在编写代码的时候,可以调用这个类中的方法来完成一些打印功能。如实现设置添加打印任务、打开打印对话框、执行页面打印等等作业。一般来说,通过这个类就可以实现大部分的打印作业。不过需要注意的是,这个类是用来实现一些普通的打印功能。如果涉及到比较特殊的打印指令,虽然通过方法重构等手段也可以实现,但是比较复杂。在Java语言(Java语言中定义常量注意事项解析)中针对特殊的打印选项,也有一些对应的类。所以在开发打印功能的时候,这个PrinterJob类是最基础的类。在了解了这个类之后,再去适当了解其他的一些特殊的打印类。如此的话,程序开发人员才能够以最少的代码、最少的时间来实现比较复杂的打印控制。特别是用户有一些比较特殊的打印需求时,结合其他的类可以达到事半功倍的效果。如果从零开始来开发新方法,那是得不偿失了。程序开发人员即使不能够记住Java语言中所有的打印类,也必须要对他们有一个大概的印象。至少当用户提出某个打印需求时,需要知道在Java语言的类中是否有与之相对应的类。然后再通过查询相关的资料来调用这个类。(子类如何青处于蓝而胜于蓝)
二、使用PrintJob对象。
跟其他类一样,如果需要使用这个PrintJob类的话,则需要先利用这个类来创建打印对象。不过程序开发人员需要注意的是,这个PrintJob类采用的是单例模式,也就是说,他必须通过静态方法来获取唯一的实例。如一般情况下,我们程序开发人员可以采用如下的语句来创建对象:PrintJob pjob=PringJob.getPrinterJob()。一但执行这条语句,就会创建PringJob类的实例对象。注意这个方法必须是静态的。当这个实例对象创建之后,在程序中这个对象就是唯一的。在其他模块或者以后需要再次调用这个方法时,就可以直接引用这个对象的方法,而不需要再次创建。这就是静态方法所带来的好处。由于各个模块采用相同的打印方法,这也会后续的打印队列等功能提供了实现了可能性。
三、调用PringJob对象的常见方法。
在PringJob类中,定义了很多的方法,如设置打印任务名称、设置打印页面、追踪打印状态等等。所以作为Java程序开发人员是一件很开心的事情。因为在开发打印功能的时候,基本上只需要直接引用类中的方法即可,而很少需要重新开发新的功能。
当有多个文档在打印的时候,在打印窗口可以看到有多个待打印的文档在排队。这是通过setJobName方法来实现的。PrinterJob类可以调用访问打印任务名称的属性,这个属性就是现实在打印任务列表中的相关打印任务。在这个类中,设置打印任务主要是通过setJobName方法来实现的。这个方法会接收String类型的字符串作为其参数,然后会利用这个参数的值作为打印任务的名称。不过这个方法只是在打印窗口中显示打印的名称,那么这个打印的名称到底是什么呢?此时就需要用到另外一个方法 getJobName方法。如使用String printname=pjop.getJopName()语句,来获得打印的名称。当调用这个方法时,会返回一个字符串类型的值,它就是打印窗口中显示的打印名称。利用这个方法获得这个打印名称的值之后,再将其传递给setJobName方法,就可以让打印窗口显示打印的名称了。所以,这两个方法,一是获取打印的名子,二是将打印的方法显示在打印窗口中,他们往往是同时出现的,相互配合实现这一组功能。这里需要注意的是,在使用getJopName()成员方法获得打印任务的名称时,一般情况下就显示打印文档的名子。但是如果用户有特殊的要求,如在一些共享打印服务器或者网络打印服务器中,除了要显示打印文档的名字,还需要现实打印着的电脑名字或者IP地址的话,那么需要对这个方法进行适当的调整。让其不仅要取得打印文件的名字,同时要获得打印者的主机名字或者IP地址。
在这个类中,还有一个现成的控制打印状态的方法。用户在打印的过程中,如果发现某个需要打印的文件不是其要打印的。或者网络管理员发现网络打印机任务比较繁忙,要取消一些在队列中等待的图片文件的打印作业时,就需要用到这个方法。打印控制器允许用户如果打印作业正在进行中或者出于队列等待中,可以控制取消下一次打印作业。这主要是利用这个PrintJob类的isCancelled方法来实现的。这个方法会返回布尔类型的值,即true或者false。其中前者表示打印被取消了,后者表示打印没有被取消。这个对应关系不要搞错,否则的话,就可能会得到相反的结果。要取得打印状态,可以通过如下的语句来获得:boolean pcancel=pjob.isCancelled()。从这个语法中可以看到这个方法返回的是一个boolean类型的值。程序开发人员就可以通过这个方法的返回值来判断当前打印程序的执行状态。有时候这个方法很重要。如为了缩短用户打印的等待时间,会对某个网络打印机的等待数量进行限制。如只允许有50个文档等待打印,那么就需要用到这个方法。先利用这个方法来判断当前队列中有效的打印作业,然后对其进行统计。如果统计出来的结果已经等于上限值的话,就会禁止用户添加新的打印作业。直到这个数量小于上限值才会恢复正常。
四、获取打印用户的信息。
某些网络打印机还具有统计、权限控制等方面的功能。如可以统计各个用户打印的文件数量,控制哪些用户可以打印、哪些不可以打印等等,以提高企业网络打印机的利用率。要实现这个功能,有一个前提就是要获取打印用户的信息。也就是说,网络打印机必须要先了解当前是哪个用户提出了打印的请求,才能够进行用户打印数量的统计或者打印权限的控制。在这个PrintJob类中,有一个叫做getUserName的成员方法。通过引用这个成员方法可以获取执行打印任务的用户名称。从而程序开发人员可以利用这个用户名称来实现如上的统计或者权限控制任务。
不过这里需要注意的是,要区分这个打印用户的名称到底是哪个名称?这里有三个选项,分别为用户主机的名字、用户当前登录操作系统的帐户名字、用户打印机系统中建立的帐户等等。现在有些网络打印机为了控制用户的打印,已经进行了用户访问的控制。也就是说,网络打印机也向其他应用软件一样,有了用户登录访问的控制。即企业员工需要凭借用户名与密码来进行打印。所以程序开发人员在开发过程中,需要考虑让这个成员方法获得哪一个名字呢?一般情况下,如果网络打印机没有权限访问控制的话,一般获取用户主机的名字或者IP地址即可。如果有用户访问控制的话,那么需要获取的名字最好是用户在网络打印机系统中设置的用户名。这可以方便统计以及用户权限的控制。而且网络打印机管理员也比较容易根据用户的名称来控制打印队列。如将提高某个用户的打印优先级(可以将经理邓用户的优先级提高)、取消某个用户的打印等等。
来源:IT专家网