無論采用哪種語言來開發(fā)應(yīng)用系統(tǒng),打印功能總是少不了的。為了節(jié)省Java程序開發(fā)人員的工作量,在Java語言中專門提供了一個(gè)PrinterJob類來幫助開發(fā)人員實(shí)現(xiàn)打印控制的功能。
本文將給大家介紹一下如何使用PrintJob類來實(shí)現(xiàn)打印作業(yè)。
一、PrinterJob類的功能。
在Java語言中,實(shí)現(xiàn)打印控制的類也很多。但是筆者比較傾向于使用這個(gè)PrintJob類。它是在Java語言中控制打印作業(yè)的主要類。開發(fā)人員在編寫代碼的時(shí)候,可以調(diào)用這個(gè)類中的方法來完成一些打印功能。如實(shí)現(xiàn)設(shè)置添加打印任務(wù)、打開打印對(duì)話框、執(zhí)行頁面打印等等作業(yè)。一般來說,通過這個(gè)類就可以實(shí)現(xiàn)大部分的打印作業(yè)。不過需要注意的是,這個(gè)類是用來實(shí)現(xiàn)一些普通的打印功能。如果涉及到比較特殊的打印指令,雖然通過方法重構(gòu)等手段也可以實(shí)現(xiàn),但是比較復(fù)雜。在Java語言(Java語言中定義常量注意事項(xiàng)解析)中針對(duì)特殊的打印選項(xiàng),也有一些對(duì)應(yīng)的類。所以在開發(fā)打印功能的時(shí)候,這個(gè)PrinterJob類是最基礎(chǔ)的類。在了解了這個(gè)類之后,再去適當(dāng)了解其他的一些特殊的打印類。如此的話,程序開發(fā)人員才能夠以最少的代碼、最少的時(shí)間來實(shí)現(xiàn)比較復(fù)雜的打印控制。特別是用戶有一些比較特殊的打印需求時(shí),結(jié)合其他的類可以達(dá)到事半功倍的效果。如果從零開始來開發(fā)新方法,那是得不償失了。程序開發(fā)人員即使不能夠記住Java語言中所有的打印類,也必須要對(duì)他們有一個(gè)大概的印象。至少當(dāng)用戶提出某個(gè)打印需求時(shí),需要知道在Java語言的類中是否有與之相對(duì)應(yīng)的類。然后再通過查詢相關(guān)的資料來調(diào)用這個(gè)類。(子類如何青處于藍(lán)而勝于藍(lán))
二、使用PrintJob對(duì)象。
跟其他類一樣,如果需要使用這個(gè)PrintJob類的話,則需要先利用這個(gè)類來創(chuàng)建打印對(duì)象。不過程序開發(fā)人員需要注意的是,這個(gè)PrintJob類采用的是單例模式,也就是說,他必須通過靜態(tài)方法來獲取唯一的實(shí)例。如一般情況下,我們程序開發(fā)人員可以采用如下的語句來創(chuàng)建對(duì)象:PrintJob pjob=PringJob.getPrinterJob()。一但執(zhí)行這條語句,就會(huì)創(chuàng)建PringJob類的實(shí)例對(duì)象。注意這個(gè)方法必須是靜態(tài)的。當(dāng)這個(gè)實(shí)例對(duì)象創(chuàng)建之后,在程序中這個(gè)對(duì)象就是唯一的。在其他模塊或者以后需要再次調(diào)用這個(gè)方法時(shí),就可以直接引用這個(gè)對(duì)象的方法,而不需要再次創(chuàng)建。這就是靜態(tài)方法所帶來的好處。由于各個(gè)模塊采用相同的打印方法,這也會(huì)后續(xù)的打印隊(duì)列等功能提供了實(shí)現(xiàn)了可能性。#p#副標(biāo)題#e#
三、調(diào)用PringJob對(duì)象的常見方法。
在PringJob類中,定義了很多的方法,如設(shè)置打印任務(wù)名稱、設(shè)置打印頁面、追蹤打印狀態(tài)等等。所以作為Java程序開發(fā)人員是一件很開心的事情。因?yàn)樵陂_發(fā)打印功能的時(shí)候,基本上只需要直接引用類中的方法即可,而很少需要重新開發(fā)新的功能。
當(dāng)有多個(gè)文檔在打印的時(shí)候,在打印窗口可以看到有多個(gè)待打印的文檔在排隊(duì)。這是通過setJobName方法來實(shí)現(xiàn)的。PrinterJob類可以調(diào)用訪問打印任務(wù)名稱的屬性,這個(gè)屬性就是現(xiàn)實(shí)在打印任務(wù)列表中的相關(guān)打印任務(wù)。在這個(gè)類中,設(shè)置打印任務(wù)主要是通過setJobName方法來實(shí)現(xiàn)的。這個(gè)方法會(huì)接收String類型的字符串作為其參數(shù),然后會(huì)利用這個(gè)參數(shù)的值作為打印任務(wù)的名稱。不過這個(gè)方法只是在打印窗口中顯示打印的名稱,那么這個(gè)打印的名稱到底是什么呢?此時(shí)就需要用到另外一個(gè)方法 getJobName方法。如使用String printname=pjop.getJopName()語句,來獲得打印的名稱。當(dāng)調(diào)用這個(gè)方法時(shí),會(huì)返回一個(gè)字符串類型的值,它就是打印窗口中顯示的打印名稱。利用這個(gè)方法獲得這個(gè)打印名稱的值之后,再將其傳遞給setJobName方法,就可以讓打印窗口顯示打印的名稱了。所以,這兩個(gè)方法,一是獲取打印的名子,二是將打印的方法顯示在打印窗口中,他們往往是同時(shí)出現(xiàn)的,相互配合實(shí)現(xiàn)這一組功能。這里需要注意的是,在使用getJopName()成員方法獲得打印任務(wù)的名稱時(shí),一般情況下就顯示打印文檔的名子。但是如果用戶有特殊的要求,如在一些共享打印服務(wù)器或者網(wǎng)絡(luò)打印服務(wù)器中,除了要顯示打印文檔的名字,還需要現(xiàn)實(shí)打印著的電腦名字或者IP地址的話,那么需要對(duì)這個(gè)方法進(jìn)行適當(dāng)?shù)恼{(diào)整。讓其不僅要取得打印文件的名字,同時(shí)要獲得打印者的主機(jī)名字或者IP地址。
在這個(gè)類中,還有一個(gè)現(xiàn)成的控制打印狀態(tài)的方法。用戶在打印的過程中,如果發(fā)現(xiàn)某個(gè)需要打印的文件不是其要打印的?;蛘呔W(wǎng)絡(luò)管理員發(fā)現(xiàn)網(wǎng)絡(luò)打印機(jī)任務(wù)比較繁忙,要取消一些在隊(duì)列中等待的圖片文件的打印作業(yè)時(shí),就需要用到這個(gè)方法。打印控制器允許用戶如果打印作業(yè)正在進(jìn)行中或者出于隊(duì)列等待中,可以控制取消下一次打印作業(yè)。這主要是利用這個(gè)PrintJob類的isCancelled方法來實(shí)現(xiàn)的。這個(gè)方法會(huì)返回布爾類型的值,即true或者false。其中前者表示打印被取消了,后者表示打印沒有被取消。這個(gè)對(duì)應(yīng)關(guān)系不要搞錯(cuò),否則的話,就可能會(huì)得到相反的結(jié)果。要取得打印狀態(tài),可以通過如下的語句來獲得:boolean pcancel=pjob.isCancelled()。從這個(gè)語法中可以看到這個(gè)方法返回的是一個(gè)boolean類型的值。程序開發(fā)人員就可以通過這個(gè)方法的返回值來判斷當(dāng)前打印程序的執(zhí)行狀態(tài)。有時(shí)候這個(gè)方法很重要。如為了縮短用戶打印的等待時(shí)間,會(huì)對(duì)某個(gè)網(wǎng)絡(luò)打印機(jī)的等待數(shù)量進(jìn)行限制。如只允許有50個(gè)文檔等待打印,那么就需要用到這個(gè)方法。先利用這個(gè)方法來判斷當(dāng)前隊(duì)列中有效的打印作業(yè),然后對(duì)其進(jìn)行統(tǒng)計(jì)。如果統(tǒng)計(jì)出來的結(jié)果已經(jīng)等于上限值的話,就會(huì)禁止用戶添加新的打印作業(yè)。直到這個(gè)數(shù)量小于上限值才會(huì)恢復(fù)正常。#p#副標(biāo)題#e#
四、獲取打印用戶的信息。
某些網(wǎng)絡(luò)打印機(jī)還具有統(tǒng)計(jì)、權(quán)限控制等方面的功能。如可以統(tǒng)計(jì)各個(gè)用戶打印的文件數(shù)量,控制哪些用戶可以打印、哪些不可以打印等等,以提高企業(yè)網(wǎng)絡(luò)打印機(jī)的利用率。要實(shí)現(xiàn)這個(gè)功能,有一個(gè)前提就是要獲取打印用戶的信息。也就是說,網(wǎng)絡(luò)打印機(jī)必須要先了解當(dāng)前是哪個(gè)用戶提出了打印的請(qǐng)求,才能夠進(jìn)行用戶打印數(shù)量的統(tǒng)計(jì)或者打印權(quán)限的控制。在這個(gè)PrintJob類中,有一個(gè)叫做getUserName的成員方法。通過引用這個(gè)成員方法可以獲取執(zhí)行打印任務(wù)的用戶名稱。從而程序開發(fā)人員可以利用這個(gè)用戶名稱來實(shí)現(xiàn)如上的統(tǒng)計(jì)或者權(quán)限控制任務(wù)。
不過這里需要注意的是,要區(qū)分這個(gè)打印用戶的名稱到底是哪個(gè)名稱?這里有三個(gè)選項(xiàng),分別為用戶主機(jī)的名字、用戶當(dāng)前登錄操作系統(tǒng)的帳戶名字、用戶打印機(jī)系統(tǒng)中建立的帳戶等等。現(xiàn)在有些網(wǎng)絡(luò)打印機(jī)為了控制用戶的打印,已經(jīng)進(jìn)行了用戶訪問的控制。也就是說,網(wǎng)絡(luò)打印機(jī)也向其他應(yīng)用軟件一樣,有了用戶登錄訪問的控制。即企業(yè)員工需要憑借用戶名與密碼來進(jìn)行打印。所以程序開發(fā)人員在開發(fā)過程中,需要考慮讓這個(gè)成員方法獲得哪一個(gè)名字呢?一般情況下,如果網(wǎng)絡(luò)打印機(jī)沒有權(quán)限訪問控制的話,一般獲取用戶主機(jī)的名字或者IP地址即可。如果有用戶訪問控制的話,那么需要獲取的名字最好是用戶在網(wǎng)絡(luò)打印機(jī)系統(tǒng)中設(shè)置的用戶名。這可以方便統(tǒng)計(jì)以及用戶權(quán)限的控制。而且網(wǎng)絡(luò)打印機(jī)管理員也比較容易根據(jù)用戶的名稱來控制打印隊(duì)列。如將提高某個(gè)用戶的打印優(yōu)先級(jí)(可以將經(jīng)理鄧用戶的優(yōu)先級(jí)提高)、取消某個(gè)用戶的打印等等。



滬公網(wǎng)安備 31011702001106號(hào)