版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Java高級編程:打印“學(xué)習(xí)如何使用打印服務(wù)API摘要在這篇文章里,來自ProJavaProgramming(Apress,June2005)專家BrettSpell解釋了如何一步一步的定位打印設(shè)備,創(chuàng)建打印工程,創(chuàng)建一個(gè)Doc文檔接口的實(shí)例來描述你想要打印的數(shù)據(jù)并且初始化打印。(4500字,2005年7月25日)Java自從問世以來在各方面發(fā)展迅速,但是一直以來,打印輸出是java最弱的方面。事實(shí)上,java1.0不支持任何打印功能。Java1.1在java.awt包里包含了一個(gè)叫做PrintJob的類,但是這個(gè)類提供的打印功能十分粗糙和不可靠。當(dāng)java1.2問世,它圍繞PrinterJob設(shè)計(jì)了一個(gè)完整獨(dú)立的打印機(jī)制(叫做java2DprintingAPI),并且在java.awt.print包里定義了一些新的類和接口。這些使得基于PrintJob打印機(jī)制(就是AWTprinting)基本荒廢,雖然PrintJob從未被抨擊而且至少在這篇文章里仍然是一個(gè)提供技術(shù)的類。在J2SE1.3里當(dāng)PrintJob的功能擴(kuò)展到可以通過在java.awt包里的JobAttributes和PageAttributes兩個(gè)類設(shè)定工程和頁面的屬性時(shí)發(fā)生了一些額外的改變。隨著J2SE1.3的發(fā)布,打印功能相應(yīng)的得到了完善;但是在混合使用這兩種完全不同的打印機(jī)制的時(shí)候仍然存在一些問題。比如,這兩種機(jī)制使用java.awt.Graphics這個(gè)類的一個(gè)接口來展現(xiàn)打印內(nèi)容,意味著所有要打印的東西都必須用一張圖片表示。另外,完善的PrintJob提供了很有限的工程相關(guān)屬性的設(shè)置;這兩種機(jī)制都沒有辦法通過程序來選擇目標(biāo)打印機(jī)。Java打印最大的改變來自于J2SE的發(fā)布帶來的Java打印服務(wù)API。這個(gè)第三代Java打印支持接口突破了先前提到的使用javax.print包的PrintService和DocPrintJob接口的局限性。因?yàn)樾碌腁PI就是以前兩種舊的打印機(jī)制定義的功能函數(shù)的一個(gè)父集,它是目前我們常用的方法并且是這篇文章的焦點(diǎn)。更深入來說,以下的步驟包含了怎么使用這個(gè)新的Java打印服務(wù)API:定義打印機(jī),限制那些返回到提供你要實(shí)現(xiàn)功能的函數(shù)的列表。打印服務(wù)實(shí)現(xiàn)了PrintService接口.通過調(diào)用接口中定義的createPrintJob()方法創(chuàng)建一個(gè)打印事件,作為DocPrintJob的一個(gè)實(shí)例。創(chuàng)建一個(gè)實(shí)現(xiàn)Doc接口的類來描述你想要打印的數(shù)據(jù),你也可以創(chuàng)建一個(gè)PrintRequestAttributeSet的實(shí)例來定義你想要的打印選項(xiàng)。通過DocPrintJob接口定義的printv()方法來初始化打印,指定你先前創(chuàng)建的Doc,指定PrintRequestAttributeSet或者設(shè)為空值?,F(xiàn)在你可以檢查每一步并且試著完成它們。汪意在這篇文章里,我將交替使用打印機(jī)和打印服務(wù),因?yàn)樵诖蟛糠智闆r下,打印服務(wù)不亞于一臺(tái)真實(shí)的打印機(jī)。一般的打印服務(wù)反映了理論上可以發(fā)送到不僅僅是打印機(jī)的的輸出。舉例來說,打印服務(wù)也許根本不能打印東西但是可以往磁盤上的文件寫數(shù)據(jù)。換句話說,所有的打印機(jī)可以看成是特殊的打印服務(wù),但是并不是所有打印服務(wù)和打印機(jī)有聯(lián)系。就像你一般把你的文本送到打印機(jī)那里一樣,我有時(shí)候使用更為簡便的打印機(jī)這個(gè)名詞來代替技術(shù)上更精確的打印服務(wù)。定義打印服務(wù)你可以使用在PrintServiceLookup類中定義的三種靜態(tài)方法中的一種來定義。最簡單的一種就是lookupDefaultPrintService(),正如它的名字一樣,它返回一個(gè)你默認(rèn)的打印機(jī):PrintServiceservice=PrintServiceLookup.lookupDefaultPrintService();雖然用這個(gè)辦法很簡單也很方便,用它來選擇你的打印機(jī)意味著用戶的打印機(jī)一直都支持你的程序所要精確傳輸?shù)臄?shù)據(jù)輸出。實(shí)際上,你真正想要的是那種可以處理你想要的數(shù)據(jù)的類型并且可以支持你要的特征例如顏色或者兩邊打印。為了從列表中中返回你所要求的特殊功能支持的打印機(jī),你可以使用剩下兩個(gè)方法中的lookupPrintServices()或者lookupMultiDocPrintServices()。lookupPrintServices()方法有兩個(gè)參數(shù):一個(gè)DocFlavor的實(shí)例和實(shí)現(xiàn)AttributeSet接口的實(shí)例。你馬上將看到,你可以使用兩者中任意一個(gè)來限制返回的打印機(jī),但是lookupPrintServices()允許你指定這兩個(gè)參數(shù)為空值。如果把兩者都設(shè)為空,那么你得到的返回值將是任意一個(gè)可用的打印機(jī)。在這種情況下,你并不需要查看PrintService中定義的方法,其中一個(gè)getName()方法返回了一個(gè)字符串,代表打印機(jī)的名字。你可以編譯下面的代碼來列出你的系統(tǒng)現(xiàn)有的打印機(jī):PrintServiceservices=PrintServiceLookup.lookupPrintServices(null,null);for(inti=0;i<services.length;i++)(System.out.println(services.getName());}例如你的系統(tǒng)名為PrintServer,下面有Alpha,Beta,和Gamma打印機(jī),用以上代碼可以得到以下輸出:\\PrintServer\Alpha\\PrintServer\Beta\\PrintServer\Gamma現(xiàn)在查看那些你可以傳給lookupPrintServices()方法的參數(shù)來看看如何返回?fù)碛刑厥夤δ艿拇蛴C(jī)。第一個(gè)你可以指定的參數(shù)是一個(gè)DocFlavor類的實(shí)例,它描述了將要打印的數(shù)據(jù)的類型和數(shù)據(jù)如何存儲(chǔ)。在大部分情況下,并不需要去創(chuàng)建一個(gè)新的實(shí)例因?yàn)镴ava包含了很多預(yù)先定義的實(shí)例,使得你可以用它們來傳給lookupPrintServices()。然而,我們還是來看一下DocFlavor的結(jié)構(gòu)和方法來探討打印服務(wù)如何使用這個(gè)實(shí)例。創(chuàng)建DocFlavor實(shí)例需要的兩個(gè)參數(shù)都是字符串,一個(gè)是MIME(MultipurposeInternetMailExtensions)類型另一個(gè)是類的名字。MIME類型被用于描述數(shù)據(jù)類型。例如,你要打印一個(gè)gif文件,你需要使用MIME類型是image/gif的DocFlavor。相類似,如果你要打印HTML文件里的文本信息要使用MIME類型似text/plain或者text/html。表現(xiàn)類MIME類型描述將要打印的數(shù)據(jù)的類型,表現(xiàn)的類則表示如何讓打印服務(wù)得到這些數(shù)據(jù)。DocFlavor包含了幾個(gè)靜態(tài)的內(nèi)部類,每一個(gè)相對應(yīng)一個(gè)表現(xiàn)類和如何裝載要打印得數(shù)據(jù)。表1中列出了上面提到的內(nèi)部類和表現(xiàn)類。注意在SERVICE_FORMATTED(一會(huì)我會(huì)更詳細(xì)地解釋)旁邊,每一個(gè)和"binary"或者"character"相對應(yīng)。事實(shí)上,這些差別是人為的,因?yàn)?character”數(shù)據(jù)類型本身就是一種特殊的binary類型。這種情況下,我們說的二進(jìn)制(binary)數(shù)據(jù)包括人們可以看懂的字符和一些格式化的字符比如tabs,換行回車等。當(dāng)然,這些差別很重要,反映出面向字符的表現(xiàn)類并不適合存儲(chǔ)二進(jìn)制數(shù)據(jù)。例如,你不會(huì)用字符隊(duì)列或者字符串來保存一個(gè)gif文件,你也不能通過Reader接口來訪問它。另一方面,因?yàn)樽址彩且环N特殊的二進(jìn)制數(shù)據(jù),它完全適合儲(chǔ)存文本信息到字節(jié)數(shù)組里或者通過InputStream或者一個(gè)URL來訪問它。Table1.DocFlavor的表現(xiàn)類上面定義的任何一個(gè)靜態(tài)內(nèi)部類相對應(yīng)一個(gè)表現(xiàn)類,但是請記住我說過每一個(gè)DocFlavor的實(shí)例通過一個(gè)表現(xiàn)類和一個(gè)MIME來確認(rèn)要打印的數(shù)據(jù)的類型。要訪問這樣一個(gè)實(shí)例,你要通過表1總列出的內(nèi)部類。例如,我們假設(shè)你要打印一個(gè)在網(wǎng)上通過URL訪問的gif文件,這樣的話,就選擇表現(xiàn)類是.url,對應(yīng)的在DocFlavor中的靜態(tài)類就是URL類。如果你打開那個(gè)內(nèi)部類的文檔,你會(huì)發(fā)現(xiàn)其實(shí)它定義了一系列靜態(tài)的內(nèi)部類,每一個(gè)對應(yīng)一種打印機(jī)支持的MIME類型。表2描述了在DocFlavor.URL里的內(nèi)部類和MIMETable2.TheDocFlavor.URLinnerclasses因?yàn)橐ㄟ^URL打印gif圖片,你可以用一下代碼來獲得實(shí)例這個(gè)代碼創(chuàng)建了一個(gè)DocFlavor實(shí)例,代表類是.URL,MIME是image/gif。表2列出的了DocFlavor.URL的類,那么其他六個(gè)內(nèi)部類呢?我們等下來討論一下SERVICE_FORMATTED,這之前,看看與二進(jìn)制數(shù)據(jù)聯(lián)系的所有三種類型(BYTE_ARRAYINPUT_STREAM,andURL)相關(guān)的內(nèi)部類。例如,如果你把gif儲(chǔ)存到了一個(gè)字節(jié)數(shù)組里,那么你可以用以下代碼:DocFlavorflavor=DocFlavor.BYTE_ARRAYGIF;正如有三個(gè)與二進(jìn)制類型關(guān)聯(lián)的內(nèi)部類一樣,與字符類型相關(guān)的另外三個(gè)類列在表3里Table3.CHAR_ARRAY,READER,andSTRING所以,如果你想打印儲(chǔ)存在字符串中的文本數(shù)據(jù),用以下代碼:DocFlavorflavor=DocFlavor.STRINGTEXT_PLAIN;類似,如果文本來自于網(wǎng)頁上的HTML文檔,用以下代碼:DocFlavorflavor=DocFlavor.STRINGTEXT_HTML;選擇正確的打印機(jī)還記得我們在開始關(guān)于討論DocFlavor之前關(guān)于打印機(jī)的那個(gè)精確支持你想要打印的數(shù)據(jù)類型的假設(shè)嗎?這似乎看起來沒有必要。實(shí)際上,你會(huì)對給你的打印機(jī)所支持的文檔類型感到吃驚。例如,剛提到文本類型看起來似乎是最容易支持的,所以,如果你的程序要打印一個(gè)普通文本或者HTML文本,你可以隨便選擇一個(gè)打印服務(wù)并把它送到打印機(jī)那去。然而大部分打印機(jī)不支持基于文本的表現(xiàn)類,如果你試圖向打印機(jī)發(fā)送它不支持的DocFlavor,會(huì)產(chǎn)生下面的異常:Exceptioninthread"main"sun.print.PrintJobFlavorException:invalidflavoratsun.print.Win32PrintJob.print(Win32PrintJob.java:290)atPrintTest.main(PrintTest.java:11)現(xiàn)在你已經(jīng)知道了如何得到一個(gè)DocFlavor的引用而且我們也討論了選擇支持這個(gè)flavor的打印機(jī)重要性,接下來我來告訴你如何確定你使用的打印機(jī)支持它。我先前說過lookupPrintServices()允許你指定一個(gè)DocFlavor作為第一個(gè)參數(shù),如果你指定的參數(shù)非空,那么方法會(huì)返回相應(yīng)支持這個(gè)的打印機(jī)的實(shí)例。例如以下代碼將返回可以通過URL來打印gif文件的打印機(jī)的列表:DocFlavorflavor=DocFlavor.URL.GIF;PrintServiceservices=PrintServiceLookup.lookupPrintServices(flavor,null);另外,如果你的程序已經(jīng)獲得了打印服務(wù)的實(shí)例,而你想知道它是否支持另一種特定的flavor,你可以調(diào)用isDocFlavorSupported()方法。在下面的代碼里,將得到一個(gè)默認(rèn)打印機(jī)的引用,如果不能打印gif就會(huì)出現(xiàn)錯(cuò)誤信息:PrintServiceservice=PrintServiceLookup.lookupDefaultPrintService();DocFlavorflavor=DocFlavor.URL.GIF;if(!service.isDocFlavorSupported(flavor))(System.err.println("TheprinterdoesnotsupporttheappropriateDocFlavor");}AttributeSet正如你看到的,DocFlavor描述打印數(shù)據(jù)而且可以用來確定打印服務(wù)是否支持這種數(shù)據(jù)。然而,你的程序需要選擇一個(gè)基于那些支持的元素的打印機(jī)。例如,你要打印圖片用不同的顏色來描述不同的信息,你想知道提供的服務(wù)是否支持彩色打印,如果不,那么要么禁止它使用或者要求提供一個(gè)黑白圖片。類似彩色打印,兩邊打印或者使用不同的定位取決于打印機(jī)本身的屬性,而javax.print.attribute包包含了許多你可以用于描述這些屬性的包和接口。其中一個(gè)接口是前面提到的lookupPrintServices()中第二個(gè)參數(shù)AttributeSet。正如你愿,它返回屬性的集合,在調(diào)用lookupPrintServices()指定一個(gè)不為空的值將返回支持這些屬性的打印服務(wù)。換句話說,如果DocFlavor和AttributeSet都不為空,那么方法將返回那些這兩種屬性都支持的打印機(jī)AttributeAttributeSet是屬性的集合,一個(gè)顯而易見的問題是如何指定屬性的值呢?javax.print.attribute包里同時(shí)含有一個(gè)叫Attribute的接口,你馬上可以看到通過調(diào)用add方法來給AttributeSet創(chuàng)建一個(gè)Attribute實(shí)例來獲得這個(gè)集合。在javax.print.attribute.standard包里定義了大量你將要用到的接口。在之前,你可以查看javax.print.attribute這個(gè)包里的其他接口。屬性模塊目前為止,我們把屬性描述成打印服務(wù)的功能,而實(shí)際上在java支持的屬性中算很簡單的。對應(yīng)每個(gè)屬性,java都有相應(yīng)的模塊。只有遵循這些模塊屬性才有效。在不同的java打印服務(wù)位置使用不同的屬性,而不是所有的屬性在任何地方都適用。為了更好的理解這個(gè),來看一下javax.print.attribute.standard包里定義的OrientationRequested和ColorSupported接口。創(chuàng)建一個(gè)新的打印文檔時(shí)可以指定OrientationRequested屬性和用于打印的定位。ColorSupported在你調(diào)用PrintService接口的getAttributes方法時(shí)返回。OrientationRequested是一個(gè)你用來傳給打印機(jī)的屬性,而ColorSupported是打印服務(wù)用來提供給你關(guān)于打印機(jī)能力信息的工具。你可以在創(chuàng)建打印文檔時(shí)把ColorSupported作為屬性指定,因?yàn)榇蛴C(jī)是否支持彩色打印是你的程序不能控制的。接口和繼承你第一次查看javax.print.attribute包里的接口和類時(shí)你也許會(huì)感到選擇那些列表里的接口和類很麻煩。除了Attribute和AttributeSet和繼承AttributeSet的HashAttributeSet,javax.print.attribute包里有4個(gè)子接口和類,列出在表4和圖1中。Table4.javax.print.attribute里定義的接口和類Figure1.javax.print.attribute包的一部分類的層次結(jié)構(gòu).那么有了Attribute,AttributeSet,和HashAttributeSet為什么需要使用這些不同的接口和繼承類呢?是因?yàn)檫@些特殊的類是為那些特殊的屬性量身定做的。比方說,我提到過當(dāng)你創(chuàng)建打印文檔的時(shí)候有個(gè)地方可以使用的屬性例如ColorSupported在那里不能使用。當(dāng)創(chuàng)建這樣的文檔,你可以使用DocAttributeSet接口(或者更專業(yè)一點(diǎn),HashDocAttributeSet這個(gè)繼承的類),這個(gè)繼承類只允許你添加繼承DocAttribute這個(gè)接口的屬性。這四種不同的模塊如下:Doc:在創(chuàng)建文檔時(shí)指定如何打印文檔PrintJob:打印任務(wù)的屬性描述任務(wù)的狀態(tài)PrintRequest:初始化打印時(shí)傳給任務(wù)的請求PrintService:由打印服務(wù)返回來描述打印機(jī)的功能要知道如何工作,我們來創(chuàng)建一個(gè)DocAttributeSet的實(shí)例然后為AttributeSet設(shè)置DocAttributeSet和OrientationRequested屬性。HashDocAttributeSet定義了很好的結(jié)構(gòu),所有你可以很簡便的如下創(chuàng)建實(shí)例:DocAttributeSetattrs=newHashDocAttributeSet();現(xiàn)在你已經(jīng)創(chuàng)建了AttributeSet,你可以調(diào)用add方法并把它傳給Attribute的繼承實(shí)例去。如果你看了OrientationRequested這個(gè)類的文檔,你會(huì)發(fā)現(xiàn)它包含了一系列靜態(tài)的OrientationRequest實(shí)例,每一個(gè)對應(yīng)一種文檔定位方式。要指定你想要的類型,你所要做的只是按下面的方法傳給add方法一個(gè)靜態(tài)的實(shí)例的引用:DocAttributeSetattrs=newHashDocAttributeSet();attrs.add(OrientationRequested.PORTRAIT);ColorSupported類有一點(diǎn)不同但一樣很簡單,它定義了兩種靜態(tài)實(shí)例:一個(gè)表示支持彩色打印另一個(gè)不是。你可以試著增加一個(gè)ColorSupported屬性到DocAttributeSet去,代碼如下:DocAttributeSetattrs=newHashDocAttributeSet();attrs.add(OrientationRequested.PORTRAIT);attrs.add(ColorSupported.SUPPORTED);早先提過,去指定是否支持彩色打印不恰當(dāng)因?yàn)檫@不是程序所能控制的內(nèi)容。換句話說,ColorSupported這個(gè)屬性放到一系列文檔屬性中并不合適,所以,運(yùn)行先前的代碼當(dāng)添加ColorSupported屬性時(shí)會(huì)拋出一個(gè)ClassCastException異常。要學(xué)習(xí)怎么運(yùn)行,記住每一個(gè)AttributeSet子接口都有一個(gè)相應(yīng)Attribute子接口和繼承子類。當(dāng)添加一個(gè)屬性時(shí),繼承的子類試圖把Attribute作為參數(shù)給相應(yīng)的子接口,這樣來確保只有當(dāng)前適當(dāng)?shù)膶傩詴?huì)成功添加。這樣的話,HashDocAttributeSet的add方法第一次和OrientationRequested的一個(gè)實(shí)例一起調(diào)用,并成功的把它作為一個(gè)object傳給DocAttribute。因?yàn)槿鐖D2所示,OrientationRequested繼承了那個(gè)接口。與之相對應(yīng),傳ColorSupported實(shí)例的時(shí)候因?yàn)闆]有繼承DocAttribute所以失敗了。Figure2.javax.print.attribute包的一部分類的層次結(jié)構(gòu)這個(gè)例子舉例說明,表4里的四個(gè)接口和類組來保證使用正確的屬性。注意模塊和不同的屬性之間有大量的交互,所以很多屬性與不止一個(gè)模塊關(guān)聯(lián)。例如,許多屬性繼承了PrintJobAttribute和PrintRequestAttribute因?yàn)榇蟛糠质峭ㄟ^一個(gè)相關(guān)的打印任務(wù)獲得提供給你的。你可以在初始化時(shí)指定它們。舉個(gè)例子,你可以把它加到PrintRequestAttributeSet中去來指定任務(wù)名,并且在打印的時(shí)候通過PrintJobAttributeSet來返回它。因此,JobName屬性類同時(shí)繼承PrintRequestAttribute和PrintJobAttribute。AttributeSetandHashAttributeSet你已經(jīng)知道了為什么會(huì)有四個(gè)子類,但是AttributeSet接口和HashAttributeSet父類又是什么呢?AttributeSet/HashAttributeSet在你不能確定要存儲(chǔ)在這個(gè)集合中的那些僅僅和一個(gè)模塊相關(guān)的屬性時(shí)使用。記得我以前提到的lookupPrintServices()方法允許你指定AttributeSet參數(shù)來限制返回的打印服務(wù)。表面上看來最好指定PrintServiceAttributeSet的實(shí)例,但是很多你可能用到的屬性并不繼承PrintServiceAttribute。我們假設(shè)你想要讓lookupPrintServices()方法返回支持彩色打印和風(fēng)景畫打印的打印機(jī)。這些屬性與ColorSupported和OrientationRequested屬性關(guān)聯(lián),但是請注意這些類并不共享模塊,前者是一個(gè)PrintServiceAttribute而OrientationRequested與另外三個(gè)模塊(Doc,PrintRequest,和PrintJob)關(guān)聯(lián)。這意味著不存在單個(gè)的AttributeSet接口或類來同時(shí)包含ColorSupported和Sides屬性。創(chuàng)建AttributeSet的方法使用一個(gè)HashAttributeSet實(shí)例同時(shí)包含一個(gè)OrientationRequested和ColorSupported太簡單了。不像它的子類,它并不限制你往上加特殊的屬性,所以可以用以下代碼成功執(zhí)行:AttributeSetattrs=newHashAttributeSet();attrs.add(ColorSupported.SUPPORTED);attrs.add(OrientationRequested.LANDSCAPE);PrintServiceservices=PrintServiceLookup.lookupPrintServices(null,attrs);通過用戶界面的打印機(jī)選擇就此觀點(diǎn)而言,我認(rèn)為使用的打印機(jī)應(yīng)該由應(yīng)用程序計(jì)劃選擇。但操作過程中,打印輸出內(nèi)容時(shí)往往會(huì)顯示一個(gè)對話框讓用戶選擇。幸運(yùn)的是,Java通過使用ServiceUI類(在javax.print包中定義)中的靜態(tài)printDialog()方法使得這些操作簡單化。在顯示的對話框旁邊,僅在調(diào)用printDialog()時(shí)必須指定的參數(shù)值如下:用戶可選用的PrintService實(shí)例數(shù)組。默認(rèn)的PrintServiceoPrintRequestAttributeSet實(shí)例。這用來彈出顯示的對話框,并在對話框消失之前返回用戶所作的任何更改。要解釋這些如何運(yùn)作,可使用下列簡單的代碼段來顯示打印對話:PrintServiceservices=PrintServiceLookup.lookupPrintServices(null,null);PrintServicesvc=PrintServiceLookup.lookupDefaultPrintService();PrintRequestAttributeSetattrs=newHashPrintRequestAttributeSet();PrintServiceselection=ServiceUI.printDialog(null,100,100,services,svc,null,attrs);運(yùn)行時(shí),代碼產(chǎn)生如圖例3中所示的對話框Figure3.Theprinterdialog隨著代碼的說明,從printDialog()方法返回的值是一個(gè)PrintService實(shí)例,識(shí)別用戶所選的打印機(jī),或在用戶取消打印機(jī)對話時(shí)識(shí)別為空。此外,PrintRequestAttributeSet已更新到可通過對話框來反映用戶作出的更改,比如要打印的份數(shù)。通過使用printDialog()方法,可讓用戶選擇其輸出要發(fā)往的打印機(jī),提供用戶對于專業(yè)應(yīng)用程序的期望功能。創(chuàng)建打印任務(wù)這是打印中的一個(gè)簡單步驟;因?yàn)橐坏┇@得PrintService的一個(gè)參考,你需要做的就是調(diào)用createPrintJob()方法,如:PrintServiceservice;DocPrintJobjob=service.createPrintJob();代碼中顯示,從createPrintJob()返回的值是一個(gè)DocPrintJob實(shí)例,可讓您控制并監(jiān)控打印操作的狀態(tài)。要啟動(dòng)打印,您會(huì)調(diào)用DocPrintJob對象的print()方法,但是,這之前,您需要定義待打印的文檔或選用PrintRequestAttributeSe。您已經(jīng)知道如何構(gòu)造并彈出AttributeSet,這個(gè)步驟不再重復(fù),接下來,您將了解定義待打印的文檔。定義要打印的文檔接下來這一步是定義要打印的文檔,用一個(gè)在javax.print包里的Doc的接口實(shí)例來創(chuàng)建。每一個(gè)Doc的實(shí)例有兩個(gè)必須定義的屬性和一個(gè)可選擇的屬性:Object代表要打印的內(nèi)容DocFlavor的一個(gè)實(shí)例描述數(shù)據(jù)類型可選的DocAttributeSet包含打印時(shí)的屬性復(fù)習(xí)Doc接口的文檔可以看出javax.print包里包含了一個(gè)叫SimpleDoc的接口的繼承,它的構(gòu)造函數(shù)包含了上面三個(gè)參數(shù)。要知道如何構(gòu)建SimpleDoc的實(shí)例,我們假設(shè)你要打印兩份存在http:ZZ/ApressCorporate/supplement/1Z421/bcm.gif的gif文件拷貝。我們要做的就是構(gòu)建一個(gè)SimpleDoc實(shí)例來描述這個(gè)文檔創(chuàng)建了一個(gè)URL來指向圖片,并且引用了DocFlavor,并把這兩個(gè)傳
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公務(wù)員模擬測試題
- 春游踏青活動(dòng)策劃方案(3篇)
- 滅火應(yīng)急疏散設(shè)施管理制度(3篇)
- 疫情期間用水管理制度(3篇)
- 視頻監(jiān)控設(shè)備使用管理制度(3篇)
- 酒店室內(nèi)餐廳管理制度范本(3篇)
- 門店氣球策劃活動(dòng)方案(3篇)
- 項(xiàng)目組人員安全管理制度(3篇)
- 《GA 475-2004抗人血清試劑》專題研究報(bào)告
- 兼職安全員培訓(xùn)
- 吉林省梅河口市五中2025-2026學(xué)年高二上學(xué)期期末語文試卷及答案
- 2026年張家界航空工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性考試模擬測試卷新版
- 2026遼寧機(jī)場管理集團(tuán)校招面筆試題及答案
- 里氏硬度計(jì)算表
- 輸電線路基礎(chǔ)知識(shí)輸電線路組成與型式
- GB/T 14536.1-2022電自動(dòng)控制器第1部分:通用要求
- GB/T 24128-2009塑料防霉性能試驗(yàn)方法
- 土地買賣合同協(xié)議書模板
- 人員素質(zhì)測評理論與方法-素質(zhì)測評概述課件
- 微型消防站花名冊
- 鈑金噴漆合作協(xié)議
評論
0/150
提交評論