javax.print

javax.print

javax.print包,是新發布的jdk1.4完善Java列印功能中的軟體包之一,它對已有的列印功能是積極的補充。利用它,我們可以實現大部分實際套用需求,包括列印文字、圖形、檔案及列印預覽等等。

javax.print軟體包介紹,軟體包 javax.print 的描述,備如下功能,PrintService 發現,屬性定義,文檔類型規範,使用 API,調用 PrintJob 的 print 方法,請注意,

javax.print軟體包介紹

在我們的實際工作中,經常需要實現列印功能。但由於歷史原因,Java提供的列印功能一直都比較弱。實際上最初的jdk根本不支持列印,直到jdk1.1才引入了很輕量的列印支持。所以,在以前用Java/Applet/JSP/Servlet設計的程式中,較複雜的列印都是通過調用ActiveX/OCX控制項或者VB/VC程式來實現的,非常麻煩。實際上,SUN公司也一直致力於Java列印功能的完善,而Java2平台則終於有了一個健壯的列印模式的開端,該列印模式與Java2D圖形包充分結合成一體。更令人鼓舞的是,新發布的jdk1.4則提供了一套完整的"Java 列印服務 API" (Java Print Service API)。Java的列印API主要存在於java.awt.print包中。而jdk1.4新增的類則主要存在於javax.print包及其相應的子包javax.print.eventjavax.print.attribute中。其中javax.print包中主要包含列印服務的相關類,而javax.print.event則包含列印事件的相關定義,javax.print.attribute則包括列印服務的可用屬性列表等。

軟體包 javax.print 的描述

為 JavaTM Print Service API 提供了主要類和接口。Java Print Service API 允許客戶端和伺服器應用程式具

備如下功能

根據其性能發現並選擇 PrintService。
指定列印數據的格式。
向支持所列印文檔類型的服務提交 PrintJob。

PrintService 發現

應用程式可調用抽象類 PrintServiceLookup 的靜態方法來查找 PrintService,這些 PrintService 具有滿足應用程式列印要求的功能。例如,要列印雙面文檔,應用程式首先需要找到具有雙面列印功能的印表機。
JDK 包括的 PrintServiceLookup 實現可查找標準的平台印表機。要查找其他類型的印表機(如 IPP 印表機或 JINI 印表機),PrintService 提供程式可寫入 PrintServiceLookup 實現。PrintService 提供程式可使用《SPI JAR file specification》動態地安裝這些 PrintServiceLookup 實現。

屬性定義

javax.print.attributejavax.print.attribute.standard包定義了列印屬性,這些屬性描述了 PrintService 的功能、指定 PrintJob 的要求並跟蹤 PrintJob 的進度。
javax.print.attribute 包描述了屬性類型和屬性分類方法。javax.print.attribute.standard 包枚舉了 API 所支持的所有標準屬性,其中大多數是在 IETF 規範《RFC 2911 Internet Printing Protocol, 1.1:Model and Semantics》(2000 年 9 月)中所指定的屬性實現。javax.print.attribute.standard 中指定的屬性包括常見的功能,如:解析度、份數、介質大小、作業優先權和頁面範圍。

文檔類型規範

DocFlavor 類表示了列印數據的格式,如 JPEG 或 PostScript。DocFlavor 對象由 MIME 類型(描述了格式)和文檔表示形式類名(指示如何將文檔傳送到印表機或輸出流)所組成。應用程式使用 DocFlavor 和屬性集來查找某些印表機,這些印表機可列印由 DocFlavor 所指定的文檔類型且具有屬性集所指定的功能。

使用 API

典型的應用程式使用 Java Print Service API 執行以下步驟來處理列印請求:
選擇一個 DocFlavor。
創建一個屬性集。
找到一個可處理由 DocFlavor 和屬性集所指定的列印請求的 PrintService。
創建一個 Doc 對象,該對象封裝 DocFlavor 和實際的列印數據,這些列印數據可採用很多形式,包括:Postscript 檔案、JPEG 圖像、URL 或純文本。
從 PrintService 獲得一個由 DocPrintJob 表示的 PrintJob。

調用 PrintJob 的 print 方法

以下代碼示例說明了 Java Print Service API 的典型用法:找到可在 A4 大小的紙張上列印 5 份 Postscript 文檔雙面副本的印表機、根據某個返回的 PrintService 創建 PrintJob 並調用 print 方法。
FileInputStream psStream;
try {
psStream = new FileInputStream("file.ps");
} catch (FileNotFoundException ffne) {
}
if (psStream == null) {
return;
}
DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
Doc myDoc = new SimpleDoc(psStream, psInFormat, null);
PrintRequestAttributeSet aset =
new HashPrintRequestAttributeSet();
aset.add(new Copies(5));
aset.add(MediaSize.A4);
aset.add(Sides.DUPLEX);
PrintService[] services =
PrintServiceLookup.lookupPrintServices(psInFormat, aset);
if (services.length > 0) {
DocPrintJob job = services[0].createPrintJob();
try {
job.print(myDoc, aset);
} catch (PrintException pe) {}
}

請注意

在 javax.print API 中,只有在方法中顯式記錄傳遞給方法的 null 引用參數具有有意義的解釋時,該參數才是正確的。否則就是錯誤的編碼方式,並且可能立即或在稍後某時導致運行時異常。IllegalArgumentException 和 NullPointerException 是典型的異常示例,並且是這種情況可接受的運行時異常。

相關詞條

熱門詞條

聯絡我們