共用方式為


startXpsPrintJob 函式 (xpsprint.h)

[StartXpsPrintJob 不受支援,未來可能會變更或無法使用。 ]

開始將 XPS 檔串流列印至印表機。

語法

HRESULT StartXpsPrintJob(
  [in]  LPCWSTR            printerName,
  [in]  LPCWSTR            jobName,
  [in]  LPCWSTR            outputFileName,
  [in]  HANDLE             progressEvent,
  [in]  HANDLE             completionEvent,
  [in]  UINT8              *printablePagesOn,
  [in]  UINT32             printablePagesOnCount,
  [out] IXpsPrintJob       **xpsPrintJob,
  [out] IXpsPrintJobStream **documentStream,
  [out] IXpsPrintJobStream **printTicketStream
);

參數

[in] printerName

要與此作業相關聯的印表機名稱。

[in] jobName

要與此作業相關聯的使用者指定工作名稱。 如果作業不需要個別的使用者指定名稱,則可以將此參數設定為 Null

[in] outputFileName

要重新導向此作業輸出之檔案或埠的檔案名。 設定此值會導致列印工作的輸出導向至指定的檔案或埠。 若要將列印工作傳送至 printerName所指定的印表機,此參數必須設定為 Null

[in] progressEvent

發生下列列印工作變更時發出訊號的事件控制碼:

  • 作業識別碼會指派給列印工作
  • 頁面的列印已完成
  • 檔列印已完成
  • 列印工作已取消或因為錯誤而結束
注意 在應用程式開始將資料傳送至列印工作之後,才會發出此事件的訊號。
 

XPS 列印 API 不會重設此事件,這是呼叫者的責任。

如果不需要進度通知,此參數可以設定為 Null

[in] completionEvent

當列印工作完成時發出訊號的事件控制碼。 此事件保證在每個 StartXpsPrintJob 呼叫上都只發出一次訊號。 XPS 列印 API 不會重設此事件,這是呼叫者的責任。

如果不需要任何完成通知,則可以將此參數設定為 Null

[in] printablePagesOn

參數會參考 UINT8 陣列,其元素會指定要列印之檔頁面的子集。 如下表所示,每個元素的值會指出是否要列印頁面。

Array 元素值 意義
0
請勿列印頁面。
非零
列印頁面。
 

進度事件只會針對指定列印的頁面發出訊號。

陣列中的元素代表 XPS 封裝之所有檔中指定列印的所有頁面。 例如,如果套件包含兩份檔,其中各有三頁,下表所示的陣列會指定從檔 1 列印第 0 頁和 2 頁,以及從檔 2 列印第 0 頁和第 2 頁。

元素索引 元素值 列印? 文件編號 頁碼
5 1 Yes 2 2
4 0 2 1
3 1 Yes 2 0
2 1 1 2
1 0 1 1
0 1 1 0
 

如果 printablePagesOnNull,則會列印封裝中的所有頁面。

如果 printablePagesOn 的元素數目超過套件中的頁面,則會忽略多餘的元素。

如果陣列的元素少於檔中的頁面,陣列的最後一個陣列元素的值會套用至其餘頁面。 此規則可讓您更輕鬆地指定開放式範圍,或只取得列印大型檔幾頁的範圍。

[in] printablePagesOnCount

陣列中由 printablePagesOn參考的專案數。 如果 printablePagesOnNull,則會忽略此參數。

[out] xpsPrintJob

IXpsPrintJob介面的指標,代表StartXpsPrintJob所建立的列印工作。 若要取得列印工作的狀態或取消它,請使用 IXpsPrintJob 介面。 如果不需要 IXpsPrintJob ,則可以將此參數設定為 Null

[out] documentStream

IXpsPrintJobStream介面的指標,呼叫者會將 XPS 檔寫入此列印工作所要列印的。

[out] printTicketStream

IXpsPrintJobStream介面的指標,由呼叫端用來寫入將與此作業相關聯的作業層級列印票證。 如果此參數設定為 Null,則會使用從寫入 documentStream 之 XPS 檔) 的任何列印票證 (。

傳回值

方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 描述
S_OK
此方法已成功。
E_POINTER
printerNamedocumentStreamNull
E_OUTOFMEMORY
記憶體不足,無法建立新的 IXpsPrintJob 物件。

備註

StartXpsPrintJob 是非同步函式,可在列印多工緩衝處理器建立或啟動列印工作之前傳回。

在 xpsPrintJobdocumentStreamprintTicketStream中傳回的介面,必須等到StartXpsPrintJob成功傳回之後才使用。

呼叫端開始傳送資料之後,它應該監視傳送至 progressEvent中事件所發出訊號的進度事件。 當事件收到訊號時,呼叫端必須呼叫 IXpsPrintJob::GetJobStatus 以取得列印工作的目前狀態。

當列印工作順利完成時,傳入 completedEvent 的事件會發出一次且只有一次的訊號。 為避免資料遺失,呼叫端應該監視此事件,而且在事件收到訊號之前,不應結束通話端的執行緒或應用程式。

作業狀態不會由列印多工緩衝處理器儲存或排入佇列。 由於工作處理不會等候在事件發出訊號之後讀取狀態,因此呼叫端可能會遺漏某些狀態變更,視應用程式收到變更通知的時間與稱為 IXpsPrintJob::GetJobStatus的時間之間的延遲而定。 若要接收後續通知,應用程式必須在收到通知之後重設進度事件。

如果呼叫 StartXpsPrintJob 失敗,將會更新作業狀態、發出完成和進度事件的訊號,並傳回錯誤碼。 若要取得失敗列印工作的狀態,請呼叫 IXpsPrintJob::GetJobStatus

StartXpsPrintJob會在completionEventprogressEvent上呼叫DuplicateHandle,以確保它們在作業的存留期內保持有效。 由於列印多工緩衝處理器會針對事件使用重複的控制碼,因此呼叫端可以在任何時間點關閉這些控制碼,而不會影響作業執行。 不過,建議的程式是讓呼叫端只有在 完成Event 事件收到訊號並被呼叫端觀察到之後,才關閉這些控制碼。

documentStreamprintTicketStream中傳回的IXpsPrintJobStream介面是不允許搜尋但可以關閉的僅限寫入資料流程。 呼叫端會將 XPS 檔寫入這些資料流程並列印票證內容,然後在寫入所有資料之後呼叫 Close 。 呼叫資料流程的 Write 方法是安全線程;不過,如果這類呼叫是從不同的執行緒進行,則不保證會以預期的順序認可至資料流程。

注意 列印至檔案時,應用程式會負責提供輸出 FileName 參數中傳遞的值,以進行列印到檔案作業。 若要列印至使用輸出至 FILE: 埠之驅動程式的印表機,呼叫端必須藉由顯示通用檔案對話方塊,從使用者擷取檔案名。
 

規格需求

   
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限傳統型應用程式]
目標平台 Windows
標頭 xpsprint.h
程式庫 XpsPrint.lib
Dll XpsPrint.dll

另請參閱

文件

StartXpsPrintJob1

XML Paper Specification