共用方式為


JavaScript API 參考

重要

新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。

如需詳細資訊,請參閱 列印支援應用程式設計指南

製造商可以使用此處顯示的 JavaScript API,結合 Bidi XML 檔案,透過 USB 連線支援印表裝置的 Bidi。

如需 USB Bidi 與列印裝置通訊的詳細資訊,請參閱 USB Bidi 擴充器

Bidi over USB

getSchemas 方法

此方法會處理 Bidi GET 查詢,例如 \Printer.Consumables.YellowInk:Level。 JavaScript 程式代碼可以使用 USB 總線對印表機進行查詢,並在回應回來時讀取回應。

語法

function getSchemas(scriptContext, printerStream, schemaRequests, printerBidiSchemaResponses);

參數 (getSchemas 方法)

scriptContext [in] 提供 相關屬性包存取權的 IPrinterScriptContext 物件。 printerStream

[in] 允許USB總線讀取和寫入存取的 IPrinterScriptableSequentialStream 物件。 schemaRequests

[in]包含所有要求的 Bidi 查詢字串的 Array 物件。 printerBidiSchemaResponses

[out]腳本用來儲存查詢索引鍵之所有回應的物件。

傳回值 (getSchemas 方法)

傳回值 描述
0 腳本已順利完成。
1 鏈接的裝置尚未準備好提供一些要求的資訊。 指出列印系統應該使用處理期間新增的任何 Requery 索引鍵再次呼叫 函式。

setSchema 方法

此方法會處理 Bidi SET 作業。 腳本可以判斷傳入的 Bidi 架構值,以在裝置中設定數據,或在裝置上執行一些動作,例如乾淨的筆跡頭。

如果裝置尚未準備好處理指定的數據,方法可以傳回值為 1,表示應該在等候期間之後重試呼叫。

參數 (setSchema 方法)

scriptContext [in] 提供 相關屬性包存取權的 IPrinterScriptContext 物件。 printerStream

[in] 允許USB總線讀取和寫入存取的 IPrinterScriptableSequentialStream 物件。 printerBidiSchemaElement

[in]IPrinterBidiSchemaElement 物件,其中包含要設定的 Bidi 架構值相關聯的所有數據。

傳回值 (setSchema 方法)

傳回值 描述
0 腳本已順利完成。
1 鏈接的裝置尚未準備好提供一些要求的資訊。 表示列印系統應該使用提供的 printerBidiSchemaElement 再次呼叫函式。

getStatus 方法

此方法用於在裝置列印時,從印表機取得未經請求的狀態。 只有在列印期間才會呼叫此函式。 裝置應在讀取通道上提供此腳本可解譯為 Bidi 架構值的數據。 由於對裝置的寫入通道遭到列印數據封鎖,因此這裡僅支援未經請求的狀態。

這個方法會在列印期間重複呼叫。 預期裝置只有在可用且腳本可以了解數據時,才會傳回數據。 如果裝置不支援未經請求的狀態,或不需要再次呼叫此函式,腳本應該會傳回值 2,告知 USBMon 中的 getStatus 執行線程順利結束。

參數 (getStatus 方法)

scriptContext [in] 提供 相關屬性包存取權的 IPrinterScriptContext 物件。 printerStream

[in] 允許讀取 USB 總線的 IPrinterScriptableSequentialStream 物件。 printerBidiSchemaResponses

[out]腳本用來儲存查詢索引鍵之所有回應的物件。

傳回值 (getStatus 方法)

傳回值 描述
0 腳本已順利完成。
2 鏈接的裝置不再支援未經請求的狀態,因此不應再次呼叫此函式。

startPrintJob 方法

USBMon 會在 StartDocPort 期間呼叫此方法。 呼叫 startPrintJob 可讓驅動程式修改列印數據流,或實作印裝置列印作業時所使用的主機型要求/回應通訊協定。 作業內容物件會傳遞至 函式,以允許製造商的 JavaScript 程式代碼管理作業屬性,以及取得永續性數據流的存取權。 列印數據會以 JavaScript 陣列的形式傳入,以供 JavaScript 程式代碼處理。 startPrintJob 也以下列方式提供印表機裝置的存取權:

  • 透過列印數據流

  • 透過物件,可傳回要處理的USBMon的Bidi架構回應

語法 (startPrintJob 方法)

function startPrintJob(jobScriptContext, printerStream, printerBidiSchemaResponses);

參數 (startPrintJob 方法)

jobScriptContext [in] IPrinterScriptUsbJobContext 物件,可讓製造商的 JavaScript 程式代碼存取作業屬性包和永續性數據流。 printerStream

[in] IPrinterScriptableSequentialStream 物件,製造商的 JavaScript 程式代碼可用來讀取和寫入列印裝置的數據。 printerBidiSchemaResponses

[out] 製造商的 JavaScript 程式代碼可用來傳回任何 Bidi 架構值變更/更新的 IPrinterBidiSchemaResponses 物件。

傳回值 (startPrintJob 方法)

傳回值 描述
0 成功。
1 失敗 – 清除作業內容物件,並將錯誤碼傳回至列印後台處理程式。

writePrintData 方法

USBMon 會在 writePort 期間呼叫此方法。 呼叫 writePrintData 可讓驅動程式修改列印數據流,或實作印裝置列印作業時所使用的主機型要求/回應通訊協定。 作業內容物件會傳遞至 方法,以允許製造商的 JavaScript 程式代碼管理作業屬性,以及取得永續性數據流的存取權。 列印數據會以 JavaScript 陣列的形式傳入,以供 JavaScript 程式代碼處理。 writePrintData 也以下列方式提供印表機裝置的存取權:

  • 透過列印數據流

  • 透過物件,可傳回要處理的USBMon的Bidi架構回應

function writePrintData(jobScriptContext, writePrintDataProgress, printData, printerStream, printerBidiSchemaResponses);

參數 (writePrintData 方法)

jobScriptContext [in] IPrinterScriptUsbJobContext 物件,可讓製造商的 JavaScript 程式代碼存取作業屬性包和永續性數據流。 writePrintDataProgress

[in] 製造商 JavaScript 程式代碼可用來讀取和寫入列印裝置數據的 IPrinterScriptableSequentialStream 物件。 printData

[in] IDispatch 物件,這是目前列印數據的 JavaScript 陣列。 printData 參數可讓 JavaScript 程式代碼在將數據快取至 jobScriptContext 中的其中一個數據流,或透過 printerStream 將它傳送至印表機之前,先操作數據。 printerStream

[in] 製造商 JavaScript 程式代碼可用來讀取和寫入列印裝置數據的 IPrinterScriptableSequentialStream 物件。 printerBidiSchemaResponses

[out] IPrinterBidiSchemaResponses 對象,製造商的 JavaScript 程式代碼可用來傳回任何 Bidi 架構值變更或更新。

傳回值 (writePrintData 方法)

傳回值 描述
0 成功。 從列印數據流 (printData) 處理的位元元組數目會透過 writePrintDataProgress 傳回。
1 失敗 – 將錯誤碼傳回至列印後台處理程式。
2 重試 - 在 printerBidiSchemaResponses處理任何 Bidi 架構更新(包括 Bidi 事件),然後再次呼叫 JavaScript 函式,以允許製造商的程式代碼繼續處理數據。 從列印數據流 (printData) 處理的位元元組數目會透過 writePrintDataProgress 傳回。
3 DeviceBusy – 裝置通道目前不接受數據。 這不表示失敗。 USBMon 應通知多任務緩衝處理程式裝置忙碌中,稍後再呼叫函式。 從列印數據流 (printData) 處理的位元元組數目會透過 writePrintDataProgress 傳回。
4 AbortTheJob – 裝置無法繼續處理作業,或使用者已使用列印裝置的前面板取消作業。 當USBMon收到訊息以中止列印作業時,它會先將資訊傳遞給列印後台處理程式,以中止作業,然後再傳回。

endPrintJob 方法

USBMon 會在 endDocPort 期間呼叫此方法。 呼叫 endPrintJob 可讓驅動程式修改列印數據流,或實作印裝置列印作業時所使用的主機型要求/回應通訊協定。 作業內容物件會傳遞至 方法,以允許製造商的 JavaScript 程式代碼:

  • 完成處理保存的任何列印數據

  • 透過印表資料流存取印表機裝置

  • 存取物件,該物件可傳遞適用於USBMon的Bidi架構回應以進行處理

function endPrintJob(jobScriptContext, printerStream, printerBidiSchemaResponses);

參數 (endPrintJob 方法)

jobScriptContext [in] IPrinterScriptUsbJobContext 物件,可讓製造商的 JavaScript 程式代碼存取作業屬性包和永續性數據流。 printerStream

[in]製造商 JavaScript 程式代碼可用來讀取和寫入列印裝置數據的 IPrinterScriptableSequentialStream 物件。 printerBidiSchemaResponses

[out]IPrinterBidiSchemaResponses 對象,製造商的 JavaScript 程式代碼可用來傳回任何 Bidi 架構值變更或更新。

傳回值 (endPrintJob 方法)

傳回值 描述
0 Success – 清除作業內容物件,並將成功傳回至列印後台處理程式。
1 失敗 – 清除作業內容物件,並將錯誤碼傳回至列印後台處理程式。
2 重試 - 在 printerBidiSchemaResponses處理任何 Bidi 架構更新(包括 Bidi 事件),然後再次呼叫 JavaScript 函式,以允許製造商的 JavaScript 程式代碼繼續處理數據。

透過次要 USB 的 Bidi

如果裝置支援次要USB介面,則除了 requestStatus 方法之外,裝置還可以使用前幾節所述的 getSchemassetSchema 方法。

requestStatus 方法

如果在 v4 驅動程式的指令清單檔中指定 BidiUSBStatusInterface 指示詞,則呼叫這個方法,而不是 getStatusrequestStatus 用於在列印裝置時從列印裝置取得狀態。

下圖提供 USB Bidi 延伸模組架構的概觀,其中顯示已指定 BidiUSBStatusInterface 指示詞的案例,因此會透過替代 USB 介面路由通訊。

usb bidi extender architecture with requeststatus method.使用 requeststatus 方法的 usb bidi 擴充器架構。

這個方法會在列印期間重複呼叫。 預期裝置只有在可用且腳本可以了解數據時,才會傳回數據。 如果裝置不支援請求狀態,或不需要再次呼叫此方法,腳本應該會傳回值 2,告知 USBMon 中的 getStatus 執行線程順利結束。

參數 (requestStatus 方法)

scriptContext [in] 提供 相關屬性包存取權的 IPrinterScriptContext 物件。 printerStream

[in] 允許USB總線讀取和寫入存取的 IPrinterScriptableSequentialStream 物件。 printerBidiSchemaResponses

[out]腳本用來儲存查詢索引鍵之所有回應的物件。

傳回值 (requestStatus 方法)

傳回值 描述
0 腳本已順利完成。
2 連結的裝置不再支援請求狀態,因此不應再次呼叫此函式。

IPrinterScriptContext

IPrinterScriptableSequentialStream

USB Bidi 擴充器