0

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

第一个设置:

  • 本地打印机

  • 本地运行代码

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

  • 从 word 打印:失败(份数为 1)

第二种设置:

  • 共享的本地打印机

  • 本地运行代码

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

  • 份数始终为 1

那么每个人都缺少什么?在打印机仍然应该知道要打印什么的情况下缺少某些字段会发生什么?当您从另一台计算机打印时,也会出现什么单词?有人能告诉我为什么窗户里的东西这么可怕吗?一切都应该通过spooler,为什么数据是错误的?

亲切的问候!

4

2 回答 2

2

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

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

Word 的“副本问题”由来已久据说有一个补丁可以解决这个问题,但另一种观点是,这是因为它使用了一种不寻常的打印方式。我将在这里引用一些链接内容:

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

我发现的唯一其他方法是在作业已发送到打印机时监视 JOB_INFO_2 结构的 PrintedPages 字段,并查看它是否是 TotalPages 的倍数。

[...]

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

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

于 2016-06-30T12:21:38.333 回答
1

谢谢你的回答。有没有办法在文档属性更改时捕获它们?

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

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

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

于 2016-06-30T14:30:14.680 回答