delphi 设置打印机驱动程序特定数据

wd2eg0qa  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(146)

我们有一个应用程序,打印2发票副本- 1在白色(客户)和蓝色(为我们)。
我们打印了很多这样的,所以我们得到了一个打印机与3个大托盘。一个纸盘(纸盘5)容纳4000张纸,另外两个纸盘(纸盘3和4)是容纳1600张纸和2000张纸的串联组。应用程序自动生成发票,并将一个文档发送到带有白色的托盘,将一个文档发送到带有蓝纸的托盘。
用户在此过程中没有输入。
现在,我的问题是这样的-如果我专门将蓝色副本发送到托盘3,而托盘3中没有纸张,即使托盘4还有2000多张纸可以使用,作业也会被搁置,直到有人装载它。另一方面,如果我告诉打印机在蓝色8 1/2x 11“纸上打印,它就足够聪明,知道那种类型的纸在两个托盘里,并从任何一个托盘中拉出来,直到它们都是空的。因此,我想更改我们的应用程序,以选择纸张类型/大小和颜色,而不是特定的纸盒。
该程序是用 Delphi 编写的,我一直在查看TPrinter. GetPrinter返回的DEVMODE结构。DEVMODE结构具有以dmDriverExtra为单位的存储器大小,该存储器大小指示打印驱动程序向该结构添加多少额外数据以用于其自身的存储。
有人知道如何访问这些数据并对其进行更改吗?如果你有其他语言的例子,我可能会把它改编成 Delphi ,所以任何东西都会有帮助。

x7rlezfr

x7rlezfr1#

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

如何设置纸张大小和类型:

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

如何访问/编辑“DriverExtra”数据:

简而言之:不要!
再长一点:dmDriverExtra被描述为“包含遵循此结构的专用驱动程序数据的字节数”。因此,这些数据是驱动程序的私有数据(这意味着您需要非常好的文档,以便驱动程序实际了解这些数据的格式和内容。不保证不同版本的驱动程序使用相同的格式)。
所以你唯一能做的就是使用打印对话框,检索DevMode结构并存储它以供进一步使用(然而正如我所说的:如果驱动程序发生更改,则此数据可能会变得无效...)

相关问题