0

首先,我在 windows XP、excel 2003、VS 2010、.NET 4.0 上工作,并使用 PrintQueueWatch .Net 库收集每个打印的信息。到目前为止,我所看到的是,当我打印一个包含多个副本的 Excel 活动工作表时,jobdeleted 事件会触发多个。我所期望的是,因为我打印了一个文档,所以会为整个会话创建一个作业 ID,但是对于每个副本都会触发已删除的作业。因此,如果我用 3 个副本打印一页,我至少会得到 3 个作业 ID。真正的问题是现在。当我打印一个页面时,例如在第一个副本之后打印了 3 个副本,另外 2 个副本在 jobdeleted 中获得了两次,所以我得到了 3 个唯一的 PrintJob.jobID,但是 5 次(18、19、19、20、20)。我的问题是为什么在打印会话中多次触发已删除的作业,尤其是为什么在每个副本中。

4

1 回答 1

1

Microsoft Office 应用程序在处理副本时实际上做了一些从标准打印机库中接管的幕后工作。例如,这允许他们提供打印机驱动程序本身不提供的页面整理和复印整理选项。

他们通过(在许多情况下)为每个副本创建单独的打印作业来做到这一点,然后使用JOB_INFO_3结构以通常的方式使用自己的打印作业 ID 进行处理。

当一个作业被删除但它仍然有尚未删除的链接作业​​时,它会引发事件但实际上不会删除。只有当整个链被删除时,实际的删除功能才会完成。

不幸的是,我从未对 JOB_INFO_3 的任何处理进行编码,但如果您愿意,代码在GitHub 上

于 2018-05-16T14:28:30.647 回答