【发布时间】:2014-04-10 20:44:35
【问题描述】:
我们有一个应用程序可以打印 2 份发票副本 - 1 份白色(用于客户)和 1 份蓝色(用于我们)。
我们打印了很多这些,所以我们得到了一台带有 3 个大托盘的打印机。一个纸盘(纸盘 5)可容纳 4000 张纸,另外两个(纸盘 3 和 4)是一个串联组,可容纳 1600 和 2000 张纸。应用程序自动生成发票并将一份文档发送到带有白纸的托盘,并将一份文档发送到带有蓝纸的托盘。
用户在这个过程中没有输入。
现在,我的问题是 - 如果我专门将蓝色副本发送到纸盘 3 并且纸盘 3 中没有纸,那么即使纸盘 4 有 2000 多张纸准备好,作业也会暂停,直到有人加载它去。另一方面,如果我告诉打印机在 Blue 8 1/2x11" 纸上打印,它会很聪明地知道这种类型的纸在两个纸盘中,并从其中一个纸盘中拉出直到它们都空了。所以,我想更改我们的应用程序以选择纸张类型/尺寸和颜色,而不是特定的纸盒。
该程序是用 Delphi 编写的,我一直在查看 TPrinter.GetPrinter 返回的 DEVMODE 结构。 DEVMODE 结构在 dmDriverExtra 中有一个内存大小,它指示打印驱动程序为自己的存储添加到结构中的额外数据量。
是否有人知道如何访问这些数据并对其进行更改?如果您有其他语言的示例,我可能会将其改编为 Delphi,因此任何事情都会有所帮助。
【问题讨论】:
-
打印机文档怎么说?
-
@DavidHeffernan:他们没有提及驱动程序数据结构。没有这个,我会被搞砸吗?
-
@whosrdaddy:那篇文章是指设置纸张大小,这是所有打印机的共同属性,无需驱动程序特定数据即可完成。我想要获取的纸张颜色设置特定于我们正在使用的施乐打印机,并且未在标准 DEVMODE 结构中公开。不过还是谢谢。
-
您不必分析,只需在对话框中设置您喜欢的属性,然后复制 DEVMODE 结构之后的任何内容。