设置打印机驱动特定数据

时间:2014-04-10 20:44:35

标签: delphi winapi printing

我们有一个应用程序可以打印2份发票副本 - 白色为1(对于cust),1为蓝色(对我们而言)。
我们打印了很多这些,所以我们得到一台带有3个大托盘的打印机。一个托盘(托盘5)容纳4000张,另外两个(托盘3和4)是串联套件,容纳1600张和2000张。应用程序自动生成发票,并将一份文档发送到带有白纸的托盘,另一份带有蓝纸的托盘。

用户在此过程中没有输入。

现在,我的问题是 - 如果我专门将蓝色副本发送到托盘3并且托盘3中没有纸张,则作业将被暂停,直到有人装入它,即使托盘4已准备好2000张纸走。另一方面,如果我告诉打印机在Blue 8 1 / 2x11“纸上打印,那么知道这种类型的纸张在两个托盘中并从任何一个纸张拉出直到它们都是空的是足够聪明的。所以,我想更改我们的应用程序以选择纸张类型/尺寸和颜色而不是特定纸盘。

程序是用Delphi编写的,我一直在查看TPrinter.GetPrinter返回的DEVMODE结构。 DEVMODE结构的内存大小为dmDriverExtra,表示打印驱动程序为其自身存储添加了多少额外数据。

有人知道无论如何都要访问这些数据并对其进行更改吗?如果您有其他语言的示例,我可能会将其改编为Delphi,因此任何事情都会有所帮助。

1 个答案:

答案 0 :(得分:0)

问题实际上有两个不同的项目:

如何设置pater大小和类型:

  • PaperSize将存储在dmPaperSize(值DMPAPER_LETTER)
  • PaperType有点困难。我猜它是在dmMediaType中(使用DeviceCapabilities检索可用的媒体类型及其名称)

如何访问/编辑" DriverExtra"数据:

简而言之:不要!

稍长一点:dmDriverExtra被描述为"包含遵循此结构的私有驱动程序数据的字节数"。因此,这些数据对驱动程序是私有的(这意味着您需要非常好的文档才能让驱动程序真正了解此数据的格式和内容。不能保证驱动程序的不同版本使用相同的格式)。

所以你唯一能做的就是使用打印对话框,检索DevMode结构并存储它以供进一步使用(但正如我所说:如果驱动程序发生变化,这些数据可能会变得无效......)