国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java高級編程:使用打印服務API二(圖)

2019-11-18 10:43:59
字體:
來源:轉載
供稿:網友

  選擇正確的打印機
  
  還記得我們在開始關于討論DocFlavor之前關于打印機的那個精確支持你想要打印的數據類型的假設嗎?這似乎看起來沒有必要。實際上,你會對給你的打印機所支持的文檔類型感到吃驚。例如,剛提到文本類型看起來似乎是最輕易支持的,所以,假如你的程序要打印一個普通文本或者Html文本,你可以隨便選擇一個打印服務并把它送到打印機那去。然而大部分打印機不支持基于文本的表現類,假如你試圖向打印機發送它不支持的DocFlavor,會產生下面的異常:
  
  Exception in thread "main"
  sun.PRint.PrintJobFlavorException: invalid flavor at sun.print.Win32PrintJob.print(Win32PrintJob.java:290) at PrintTest.main(PrintTest.java:11)
  
  現在你已經知道了如何得到一個DocFlavor的引用而且我們也討論了選擇支持這個flavor的打印機重要性,接下來我來告訴你如何確定你使用的打印機支持它。我先前說過lookupPrintServices()答應你指定一個DocFlavor作為第一個參數,假如你指定的參數非空,那么方法會返回相應支持這個的打印機的實例。例如以下代碼將返回可以通過URL來打印gif文件的打印機的列表:
  
  DocFlavor flavor = DocFlavor.URL.GIF;
  PrintService[] services = PrintServiceLookup.lookupPrintServices(flavor, null);
  
  另外,假如你的程序已經獲得了打印服務的實例,而你想知道它是否支持另一種特定的flavor,你可以調用isDocFlavorSupported()方法。在下面的代碼里,將得到一個默認打印機的引用,假如不能打印gif就會出現錯誤信息:
  
  PrintService service = PrintServiceLookup.lookupDefaultPrintService();
  DocFlavor flavor = DocFlavor.URL.GIF;
  if (!service.isDocFlavorSupported(flavor))
  {
  System.err.println("The printer does not support the appropriate DocFlavor");
  }
  
  AttributeSet
  
  正如你看到的,DocFlavor描述打印數據而且可以用來確定打印服務是否支持這種數據。然而,你的程序需要選擇一個基于那些支持的元素的打印機。例如,你要打印圖片用不同的顏色來描述不同的信息,你想知道提供的服務是否支持彩色打印,假如不,那么要么禁止它使用或者要求提供一個黑白圖片。
  
  類似彩色打印,兩邊打印或者使用不同的定位取決于打印機本身的屬性,而javax.print.attribute包包含了許多你可以用于描述這些屬性的包和接口。其中一個接口是前面提到的lookupPrintServices()中第二個參數AttributeSet。正如你愿,它返回屬性的集合,在調用lookupPrintServices()指定一個不為空的值將返回支持這些屬性的打印服務。換句話說,假如DocFlavor和 AttributeSet都不為空,那么方法將返回那些這兩種屬性都支持的打印機
  
  Attribute
  
  AttributeSet 是屬性的集合,一個顯而易見的問題是如何指定屬性的值呢? javax.print.attribute包里同時含有一個叫Attribute的接口,你馬上可以看到通過調用add方法來給AttributeSet創建一個Attribute實例來獲得這個集合。在javax.print.attribute.standard包里定義了大量你將要用到的接口。在之前,你可以查看javax.print.attribute這個包里的其他接口。
  
  屬性模塊
  
  目前為止,我們把屬性描述成打印服務的功能,而實際上在java支持的屬性中算很簡單的。對應每個屬性,java都有相應的模塊。只有遵循這些模塊屬性才有效。在不同的java打印服務位置使用不同的屬性,而不是所有的屬性在任何地方都適用。
  
  為了更好的理解這個,來看一下javax.print.attribute.standard 包里定義的
  
  OrientationRequested和 ColorSupported接口。創建一個新的打印文檔時可以指定OrientationRequested屬性和用于打印的定位。ColorSupported在你調用PrintService接口的getAttributes方法時返回。OrientationRequested是一個你用來傳給打印機的屬性,而ColorSupported是打印服務用來提供給你關于打印機能力信息的工具。你可以在創建打印文檔時把ColorSupported作為屬性指定,因為打印機是否支持彩色打印是你的程序不能控制的。
  
  接口和繼續
  
  你第一次查看javax.print.attribute包里的接口和類時你也許會感到選擇那些列表里的接口和類很麻煩。除了Attribute 和AttributeSet和繼續AttributeSet的HashAttributeSet,javax.print.attribute包里有4個子接口和類,列出在表4和圖1中。
  
 Java高級編程:使用打印服務API二(圖)(圖一)
點擊查看大圖

  
Table 4. javax.print.attribute 里定義的接口和類

  
 Java高級編程:使用打印服務API二(圖)(圖二)
點擊查看大圖

  
Figure 1. javax.print.attribute 包的一部分類的層次結構.

  
  那么有了Attribute, AttributeSet, 和 HashAttributeSet為什么需要使用這些不同的接口和繼續類呢?是因為這些非凡的類是為那些非凡的屬性量身定做的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 都江堰市| 镇沅| 新疆| 酉阳| 玉溪市| 玉门市| 敦煌市| 河间市| 波密县| 孝义市| 新化县| 马山县| 临高县| 余江县| 临沭县| 黄石市| 深水埗区| 仙桃市| 磴口县| 商丘市| 新河县| 洞头县| 松江区| 牡丹江市| 临朐县| 遵义市| 金湖县| 嵊泗县| 丰县| 收藏| 隆回县| 明星| 崇阳县| 深泽县| 开江县| 丁青县| 左权县| 子洲县| 辰溪县| 本溪市| 伊宁县|