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



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