打印机后台处理程序api的份数

时间:2016-06-29 13:32:52

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

我真的可以使用一些帮助,这是一个很多人在网上问的问题。我有不同的设置,尝试过不同的测试方式,这非常令人沮丧。

首先设置:

  • 本地打印机

  • 本地运行代码

  • 从pdf或记事本打印:SUCCES(份数为2)

  • 从单词打印:FAILED(副本数量为1)

第二次设置:

  • 共享的本地打印机

  • 本地运行代码

  • 从其他计算机打印到共享打印机

  • 副本数量始终为1

每个人都失踪了吗?当打印机仍然应该知道要打印什么时,某些字段丢失会发生什么?当您从另一台计算机打印时,这个词会发生什么?有人能告诉我为什么Windows中的某些事情如此可怕吗? Everythings应该通过假脱机,sowhy isthedata错了吗?

种类问候!

2 个答案:

答案 0 :(得分:2)

打印机打印纸张和页面,因此副本会在某个阶段转换为页面。

您获得的通知数据取决于正在打印的应用程序以及处理假脱机和渲染的系统和驱动程序组件。根据我的经验,不能依赖数据,并且通过解析假脱机文件获得最佳数据。这可能包含也可能不包含副本数量。

Word has had the "copies problem" for a long time。有一个patch to supposedly fix this,但另一种意见是因为它使用了unusual way of printing。我在这里引用一些链接内容:

  

臭名昭着的Word Copy Count错误... dmCopies提交的是1   SHD。在SPL文件的DEVMODE记录中找到正确的值   (如果它是EMF假脱机)。

     

我发现的唯一另一种方法是监控PrintedPages字段   JOB_INFO_2结构,当作业发送到打印机时,   并查看它是否是TotalPages的倍数。

     

[...]

     

发生的事情不是Word错误,而是Windows错误。 Word调用startDoc   始终将副本设置为1.之后调用DocumentProperties和   在dmCopies中进行更改并调用ResetDC进行更新。它   是一种奇怪的印刷方式,但没有错。问题是,   仅使用shd文件和printer_info不会使用此信息进行更新   保持在StartDoc调用上设置Devmode信息。

     

但是生成新DevMode的ResetDC的调用保留在   SPL文件。如果挂钩DocumentProperties,也可以获得该信息   API调用。

答案 1 :(得分:1)

谢谢你的回答。有没有办法在文档属性发生变化时捕获它们?

JOB_INFO_2结构与pages_printed具有相同的total_pages。所以这不是解决方案。

SPL文件确实包含我测试的打印机的QTY,这是正确的。但我们在很多打印机上进行了测试,并且我们发现QTY并非始终设置。所以不是100%的解决方案。但已经是一个很好的后备。

因此,如果我可以在不调用SPL文件的情况下捕获文档属性,那将是非常好的,因为我猜这是一切正确的地方。不是吗?