添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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

发生以下打印作业更改时发出信号的事件句柄:

  • 作业 ID 分配给打印作业
  • 页面打印已完成
  • 文档打印已完成
  • 打印作业因错误而取消或已结束
  • 注意 在应用程序开始将数据发送到打印作业之后,才会发出此事件信号。

    XPS 打印 API 不会重置此事件,即调用方的责任。

    如果不需要进度通知,可以将此参数设置为 NULL

    [in] completionEvent

    打印作业完成后发出信号的事件句柄。 保证每个 StartXpsPrintJob 调用发出一次此事件。 XPS 打印 API 不会重置此事件,即调用方的责任。

    如果不需要完成通知,可以将此参数设置为 NULL

    [in] printablePagesOn

    该参数引用 UINT8 数组,该数组的元素指定要打印的文档页面的子集。 如下表所示,每个元素的值指示是否打印页面。

    Array 元素值

    进度事件将仅针对指定打印的页面发出信号。

    数组中的元素表示在 XPS 包的所有文档中指定打印的所有页面。 例如,如果包包含两个各有三页的文档,下表中显示的数组指定从文档 1 打印第 0 页和 2 页,以及文档 2 中的页 0 和 2。

    如果 printablePagesOnNULL,则将打印包中的所有页面。

    如果 printablePagesOn 的元素数超过包中的页面,则忽略多余的元素。

    如果数组的元素少于文档中的页数,则数组的最后一个数组元素的值将应用于其余页面。 通过此规则,可以更轻松地指定一个处于打开状态的范围,或者只打印了几个大文档的页面。

    [in] printablePagesOnCount

    由 printablePagesOn 引用的数组中的元素数。 如果 printablePagesOnNULL,则忽略此参数。

    [out] xpsPrintJob

    指向 IXpsPrintJob 接口的指针,该接口表示 由 StartXpsPrintJob 创建的打印作业。 若要获取打印作业的状态或取消该作业,请使用 IXpsPrintJob 接口。 如果不需要 IXpsPrintJob ,可以将此参数设置为 NULL

    [out] documentStream

    指向 IXpsPrintJobStream 接口的指针,调用方将写入此打印作业要打印的 XPS 文档。

    [out] printTicketStream

    指向调用方用来编写将与此作业关联的作业级打印票证的 IXpsPrintJobStream 接口的指针。 如果此参数设置为 NULL,则将使用从写入 documentStream 的 XPS 文档) 打印票证 (。

    该方法返回 HRESULT。 可能的值包括(但并不限于)下表中的项。

    StartXpsPrintJob 是一个异步函数,可以在打印后台处理程序创建或启动打印作业之前返回。

    在成功返回 StartXpsPrintJob 之前,不得使用 xpsPrintJobdocumentStreamprintTicketStream 中返回的接口。

    调用方开始发送数据后,应监视向 progressEvent 中传递的事件发出信号的进度事件。 发出事件信号时,调用方必须调用 IXpsPrintJob::GetJobStatus 才能获取打印作业的当前状态。

    打印作业完成后,无论是否成功,都向 在 completionEvent 中传递的事件发出一次和一次信号。 为防止数据丢失,调用方应监视此事件,在发出事件信号之前,不应终止调用方或调用方的应用程序。

    作业状态既不是由打印后台处理程序存储和排队的。 由于作业处理不会等待在发出事件信号后读取状态,因此调用方可能会错过某些状态更改,具体取决于应用程序收到更改通知的时间和调用 IXpsPrintJob::GetJobStatus 的时间之间的延迟。 若要接收后续通知,应用程序必须在收到通知后重置进度事件。

    如果对 StartXpsPrintJob 的调用失败,作业状态将更新,将发出完成和进度事件信号,并返回错误代码。 若要获取失败的打印作业的状态,请调用 IXpsPrintJob::GetJobStatus

    StartXpsPrintJobcompletionEventprogressEvent 上调用 DuplicateHandle,以确保它们在作业的生存期内保持有效。 由于打印后台处理程序对事件使用重复句柄,因此调用方可以在任何时间点关闭这些句柄,而不会影响作业执行。 但是,建议的过程是在调用方发出信号并观察到 完成Event 事件后,调用方才能关闭这些句柄。

    documentStreamprintTicketStream 中返回的 IXpsPrintJobStream 接口是不允许查找但可以关闭的仅写流。 调用方将 XPS 文档和打印票证内容写入这些流,然后在写入所有数据后调用 Close 。 对流的 Write 方法的调用是线程安全的;但是,如果从不同的线程发出此类调用,则不能保证按预期顺序将这些调用提交到流。

    注意 打印到文件时,应用程序负责提供将在 outputFileName 参数中传递的值以执行打印到文件操作。 若要打印到使用输出到 FILE:端口的驱动程序的打印机,调用方必须通过显示通用文件对话框从用户检索文件名。