Microsoft Print Spooler API - 持有打印作业?

时间:2012-03-07 13:09:39

标签: c# api printing print-spooler-api spooler

是否有人知道是否可以在Microsoft Print Spooler API的帮助下保留打印作业?

我想在将它发送到打印机之前保留它 这可能吗?

2 个答案:

答案 0 :(得分:0)

这取决于您对打印过程的控制程度。 SetJob命令允许您暂停单个作业,但在将任何数据可能从端口发送到打印机之前,您需要进入。

当应用程序打印作业时,正常的打印路径会像

那样
  • StartDocPrinter
  • StartPagePrinter
  • WritePrinter
  • ....
  • EndPagePrinter
  • ...
  • EndDocPrinter

如果您可以在第一个WritePrinter路径之前获取SetJob命令,则可以在将任何数据发送到设备之前暂停作业。

不幸的是,如果你使用像C#PrintDocument类这样的东西,它会掩盖大部分内容,并且不提供获取调用SetJob命令所需的JobId参数和打印机句柄的任何方法。

答案 1 :(得分:0)

如果您正在使用AddJobW()和ScheduleJob(),那么是。

AddJobW()创建作业,ScheduleJob()触发它启动。 (有关示例代码,请参阅here。)

因此...

  1. 调用AddJobW()来创建作业。
  2. 调用SetJobW()重命名每个作业,将它们链接在一起(批处理)等。
  3. 调用ScheduleJob()以启动作业。