【问题标题】:Set printer driver specific data设置打印机驱动程序特定数据
【发布时间】: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 结构之后的任何内容。

标签: delphi winapi printing


【解决方案1】:

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

如何设置图案大小和类型:

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

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

简而言之:不要!

再长一点:dmDriverExtra 被描述为“包含遵循此结构的私有驱动程序数据的字节数”。所以这个数据是驱动私有的(这意味着你需要非常好的文档让驱动真正知道这个数据的格式和内容。不保证不同版本的驱动使用相同的格式)。

因此,您唯一能做的就是使用打印对话框,检索 DevMode 结构并将其存储以供进一步使用(但正如我所说:如果驱动程序更改,此数据可能会变得无效......)

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2011-10-02
    • 2013-01-20
    相关资源
    最近更新 更多