0

有谁知道是否可以在 Microsoft Print Spooler API的帮助下进行打印作业?

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

4

2 回答 2

0

如果您使用的是 AddJobW() 和 ScheduleJob(),那么可以。

AddJobW() 创建作业并 ScheduleJob() 触发它开始。(有关示例代码,请参见此处。)

所以...

  1. 调用 AddJobW() 创建作业。
  2. 调用 SetJobW() 重命名每个作业,将它们链接在一起(批处理)等。
  3. 调用 ScheduleJob() 来启动作业。
于 2012-05-31T07:39:24.860 回答
0

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

当应用程序打印作业时,正常的打印路径类似于

  • 启动文档打印机
  • 起始页打印机
  • 写打印机
  • ……
  • 结束页打印机
  • ...
  • EndDoc打印机

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

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

于 2012-04-02T22:58:49.733 回答