JavaScript API 参考

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

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

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

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

通过 USB Bidi

getSchemas 方法

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

语法

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

参数(getSchemas 方法)

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

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

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

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

返回值(getSchemas 方法)

返回值 说明
0 脚本已成功完成。
1 连接的设备未准备好提供某些请求的信息。 指示打印系统应使用在处理过程中添加的任何 Requery 键再次调用函数。

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] IPrinterScriptableSequentialStream 对象,允许对 USB 总线进行读取访问。 printerBidiSchemaResponses

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

返回值(getStatus 方法)

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

startPrintJob 方法

USBMon 在 StartDocPort 期间调用此方法。 调用 startPrintJob 允许驱动程序修改打印流或实现打印设备打印作业时使用的基于主机的请求/响应协议。 作业上下文对象被传递到函数中,以允许制造商的 JavaScript 代码管理作业属性,并获取对持久数据流的访问权限。 打印数据以 JavaScript 数组的形式传入,供 JavaScript 代码处理。 startPrintJob 还通过以下方式提供对打印机设备的访问:

  • 通过打印流

  • 通过一个可以返回 Bidi 架构响应供 USBMon 处理的对象

语法(startPrintJob 方法)

function startPrintJob(jobScriptContext, printerStream, printerBidiSchemaResponses);

参数(startPrintJob 方法)

jobScriptContext [in] IPrinterScriptUsbJobContext 对象,使制造商的 JavaScript 代码能够访问作业属性包和持久数据流。 printerStream

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

[out] IPrinterBidiSchemaResponses 对象,制造商的 JavaScript 代码可以使用该对象返回任何 Bidi 架构值更改/更新。

返回值(startPrintJob 方法)

返回值 说明
0 成功。
1 失败 – 清理作业上下文对象,并向打印后台处理程序返回错误代码。

writePrintData 方法

USBMon 在 writePort 期间调用此方法。 调用 writePrintData 允许驱动程序修改打印流或实现打印设备打印作业时使用的基于主机的请求/响应协议。 作业上下文对象被传递到方案中,以允许制造商的 JavaScript 代码管理作业属性,并获取对持久数据流的访问权限。 打印数据以 JavaScript 数组的形式传入,供 JavaScript 代码处理。 writePrintData 还通过以下方式提供对打印机设备的访问:

  • 通过打印流

  • 通过一个可以返回 Bidi 架构响应供 USBMon 处理的对象

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] IPrinterBidiSchemaResponses 对象,制造商的 JavaScript 代码可以使用该对象返回任何 Bidi 架构值更改或更新。

返回值(writePrintData 方法)

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

endPrintJob 方法

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

  • 完成对所有持久打印数据的处理

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

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

function endPrintJob(jobScriptContext, printerStream, printerBidiSchemaResponses);

参数(endPrintJob 方法)

jobScriptContext [in] IPrinterScriptUsbJobContext 对象,使制造商的 JavaScript 代码能够访问作业属性包和持久数据流。 printerStream

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

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

返回值(endPrintJob 方法)

返回值 说明
0 成功 – 清理作业上下文对象,并将成功返回到打印后台处理程序。
1 失败 – 清理作业上下文对象,并向打印后台处理程序返回错误代码。
2 重试 - 在 printerBidiSchemaResponses 中处理任何 Bidi 架构更新(包括 Bidi 事件),然后再次调用 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 双向扩展程序