JavaTM 2 Platform
Standard Ed. 6

javax.print
介面 MultiDoc


public interface MultiDoc

介面 MultiDoc 指定某個物件的介面,該物件為 PrintJob 提供多部分列印資料。"Doc" 是一個簡短、易於發音的術語,指“部分列印資料”,而 "multidoc" 指一組多個 doc。客戶端向 PrintJob 傳遞一個實作了介面 MultiDoc 的物件,PrintJob 則在該物件上調用方法來獲得列印資料。

介面 MultiDoc 提供了類似於多個 doc“連接列表”的抽象概念。一個 multidoc 物件就像該連接列表中的一個節點,包含列表中的當前 doc 和一個指向列表中下一個節點 (multidoc) 的指針。PrintJob 可以調用 multidoc 的 getDoc() 方法來獲得當前的 doc。當轉至下一個 doc 時,PrintJob 可以調用 multidoc 的 next() 方法來獲得下一個 multidoc,它包含下一個 doc。所以存取 multidoc 的 PrintJob 程式碼可能如下所示:

      void processMultiDoc(MultiDoc theMultiDoc) {
          
          MultiDoc current = theMultiDoc;

          while (current != null) {
              processDoc (current.getDoc());
              current = current.next();
          }
      }
 

當然,可以滿足協定的任意方式來實作介面 MultiDoc;不必在實作中使用連接列表。

要獲得 multidoc PrintJob 的所有列印資料,PrintService 代理可以使用以下兩種網要:

  1. interleaved 網要:從當前 multidoc 中獲得 doc。從當前 doc 中獲得列印資料表示形式物件。從列印資料表示形式物件中獲得所有列印資料。根據當前的 multidoc 獲得下一個 multidoc,重複執行該過程,直到不再有 multidoc 為止。(上述程式碼範例使用了交錯網要。)

  2. all-at-once 網要:從當前 multidoc 中獲得 doc,並將 doc 保存在列表中。根據當前的 multidoc 獲得下一個 multidoc,並重複執行該過程,直到沒有 multidoc 為止。然後在已保存的 doc 列表上進行迭代。從當前 doc 中獲得列印資料表示形式物件。從列印資料表示形式物件中獲得所有列印資料。轉到列表中的下一個 doc,並重複執行該過程,直到不再有 doc 為止。
現在,考慮一個隨時產生列印資料,並且不具有一次存儲多份列印資料的資源的列印客戶端。如果 PrintService 代理使用 all-at-once 網要來獲得列印資料,則會為這種客戶端造成難題;在 PrintService 代理回來處理並請求列印資料之前,該客戶端必須保存所有 doc 的列印資料,而該客戶端是無法這樣做的。要讓這種客戶端正常列印,PrintService 代理必須使用 interleaved 網要。

為了解決此問題並簡化客戶端向 PrintJob 提供多個 doc 的設計,必需讓所有支持 multidoc PrintJob 的 PrintService 代理使用 interleaved 網要來存取 MultiDoc 物件。也就是說,如果給定了 MultiDoc 物件,則 PrintService 代理將調用 getDoc() 一次或多次,直到它成功獲得當前 Doc 物件為止。然後 PrintService 代理將獲得當前 doc 的列印資料,在獲得所有列印資料或出現不可恢復的錯誤之前,不會執行其他操作。如果能夠繼續執行其他操作,那麼在 PrintService 代理成功獲得下一個 MultiDoc 物件或說明沒有 MultiDoc 的指示之前,PrintService 代理將接著調用 next() 一次或多次。介面 MultiDoc 的實作可以假定 PrintService 代理將使用此 interleaved 網要;對於任意其他網要的使用,未指定 MultiDoc 實作的行為。

對於同時存取同一 multidoc 的客戶端執行緒的數目沒有限制。因此,必須將介面 MultiDoc 的所有實作設計為多執行緒安全的。實際上,在 PrintJob 執行緒從 doc 列表(概念上的列表)的開始獲取 doc 的同時,客戶端執行緒可以向該列表的末尾添加 doc;只要 multidoc 物件可正確地對這些執行緒實作同步,這兩個執行緒將互不干擾。


方法摘要
 Doc getDoc()
          獲取當前的 doc 物件。
 MultiDoc next()
          轉到包含 doc 物件序列中下一個 doc 物件的 multidoc 物件。
 

方法詳細資訊

getDoc

Doc getDoc()
           throws IOException
獲取當前的 doc 物件。

返回:
當前的 doc 物件。
拋出:
IOException - 如果讀取文檔時出現錯誤。

next

MultiDoc next()
              throws IOException
轉到包含 doc 物件序列中下一個 doc 物件的 multidoc 物件。

返回:
包含下一個 doc 物件的 Multidoc 物件,如果沒有任何其他 doc 物件,則返回 null。
拋出:
IOException - 如果尋找下一個文檔時出現錯誤

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only