JavaScript API 参考

重要

建议使用 Microsoft 的 IPP 收件箱类驱动程序,以及 Print Support Apps (PSA) ,在 Windows 10 和 11 中自定义打印体验,以便进行打印机设备开发。

有关详细信息,请参阅 打印支持应用设计指南

制造商可以使用此处提供的 JavaScript API 与 Bidi XML 文件结合使用,通过与打印设备的 USB 连接为 Bidi 提供支持。

有关 USB Bidi 与打印设备通信的详细信息,请参阅 USB Bidi 扩展器

比迪 over USB

getSchemas 方法

此方法处理 Bidi GET 查询,例如 \Printer.Consumables.YellowInk:Level。 JavaScript 代码能够使用 USB 总线对打印机进行查询,并在返回时读取响应。

语法

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

getSchemas 方法) (参数

scriptContext [in] 一个 IPrinterScriptContext 对象,提供对相关属性包的访问权限。 printerStream

[in]一个 IPrinterScriptableSequentialStream 对象,该对象允许对 USB 总线进行读写访问。 schemaRequests

[in]包含所有请求的 Bidi 查询字符串的数组对象。 printerBidiSchemaResponses

[out]脚本用于存储对查询键的所有响应的对象。

返回 getSchemas 方法) (值

返回值 说明
0 脚本已成功完成。
1 附加设备尚未准备好提供一些请求的信息。 指示打印系统应使用在处理期间添加的任何重新查询键再次调用函数。

setSchema 方法

此方法处理 Bidi SET 操作。 该脚本可以确定传入的 Bidi 架构值,以在设备中设置数据,或在设备上执行某些操作,例如清理墨迹头。

如果设备尚未准备好处理指定的数据,该方法可以返回值 1,指示应在等待期后重试调用。

setSchema 方法) (参数

scriptContext [in] 一个 IPrinterScriptContext 对象,提供对相关属性包的访问权限。 printerStream

[in]一个 IPrinterScriptableSequentialStream 对象,该对象允许对 USB 总线进行读写访问。 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] 一个 IPrinterScriptableSequentialStream 对象,制造商的 JavaScript 代码可以使用该对象在打印设备中读取和写入数据。 printData

[in] IDispatch 对象,当前打印数据的 JavaScript 数组。 printData 参数允许 JavaScript 代码在将数据缓存到 jobScriptContext 中的一个数据流或通过 printerStream 将其发送到打印机之前对其进行操作。 printerStream

[in] 一个 IPrinterScriptableSequentialStream 对象,制造商的 JavaScript 代码可以使用该对象在打印设备中读取和写入数据。 printerBidiSchemaResponses

[out]制造商的 JavaScript 代码可用于返回任何 Bidi 架构值更改或更新的 IPrinterBidiSchemaResponses 对象。

(writePrintData 方法) 返回值

返回值 说明
0 成功。 通过 writePrintDataProgress 返回打印数据流 (printData) 处理的字节数。
1 失败 – 将错误代码返回到打印后台处理程序。
2 重试 - 处理任何 Bidi 架构更新 (包括 printerBidiSchemaResponses 中的 Bidi Events) ,然后再次调用 JavaScript 函数以允许制造商的代码继续处理数据。 通过 writePrintDataProgress 返回打印数据流 (printData) 处理的字节数。
3 DeviceBusy – 设备信道目前不接受数据。 这并不表示失败。 USBMon 应通知后台处理程序设备正忙,然后在以后再次调用该函数。 通过 writePrintDataProgress 返回打印数据流 (printData) 处理的字节数。
4 AbortTheJob – 设备无法继续处理作业,或者用户已使用打印设备的前面板取消作业。 当 USBMon 收到中止打印作业的消息时,它会在返回之前将信息传递给打印后台处理程序以中止该作业。

endPrintJob 方法

USBMon 在 endDocPort 期间调用此方法。 调用 endPrintJob 允许驱动程序修改打印流或实现基于主机的请求/响应协议,该协议在打印设备打印作业时使用。 作业上下文对象将传递到 方法中,以允许制造商的 JavaScript 代码:

  • 完成处理保留的任何打印数据

  • 通过打印流访问打印机设备

  • 访问一个对象,该对象可以传递要处理的 USBMon 的 Bidi 架构响应

function endPrintJob(jobScriptContext, printerStream, printerBidiSchemaResponses);

endPrintJob 方法 (参数)

jobScriptContext [in] 一个 IPrinterScriptUsbJobContext 对象,该对象允许制造商的 JavaScript 代码访问作业属性包和持久性数据流 () 。 printerStream

[in]一个 IPrinterScriptableSequentialStream 对象,制造商的 JavaScript 代码可以使用该对象在打印设备中读取和写入数据。 printerBidiSchemaResponses

[out]制造商的 JavaScript 代码可用于返回任何 Bidi 架构值更改或更新的 IPrinterBidiSchemaResponses 对象。

(endPrintJob 方法) 返回值

返回值 说明
0 成功 – 清理作业上下文对象并将成功返回给打印后台处理程序。
1 失败 - 清理作业上下文对象,并将错误代码返回到打印后台处理程序。
2 重试 - 处理任何 Bidi 架构更新 (包括 printerBidiSchemaResponses 中的 Bidi Events) ,然后再次调用 JavaScript 函数以允许制造商的 JavaScript 代码继续处理数据。

通过辅助 USB 的 Bidi

如果设备支持辅助 USB 接口,则除了 requestStatus 方法外,设备还可以使用前面部分所述的 getSchemassetSchema 方法。

requestStatus 方法

如果在 v4 驱动程序的清单文件中指定了 BidiUSBStatusInterface 指令,则调用此方法而不是 getStatusrequestStatus 用于在打印设备时从打印设备获取状态。

下图概述了 USB Bidi 扩展体系结构,显示了指定 了 BidiUSBStatusInterface 指令并因此通过备用 USB 接口路由通信的方案。

使用 requeststatus 方法的 usb bidi 扩展程序体系结构。

此方法在打印过程中重复调用。 预计设备仅在数据可用且脚本可以理解时才返回数据。 如果设备不支持请求状态或无需再次调用此方法,则脚本应返回值 2,该值指示 USBMon 中的 getStatus 执行线程成功退出。

requestStatus 方法) (参数

scriptContext [in] 一个 IPrinterScriptContext 对象,提供对相关属性包的访问权限。 printerStream

[in]一个 IPrinterScriptableSequentialStream 对象,该对象允许对 USB 总线进行读写访问。 printerBidiSchemaResponses

[out]脚本用于存储对查询键的所有响应的对象。

requestStatus 方法 (返回值)

返回值 说明
0 脚本已成功完成。
2 附加设备不再支持请求状态,不应再次调用此函数。

IPrinterScriptContext

IPrinterScriptableSequentialStream

USB 双向扩展程序