【问题标题】:WINAPI Print - Two paper types with same dimensionsWINAPI 打印 - 两种尺寸相同的纸张类型
【发布时间】:2016-07-28 09:44:42
【问题描述】:

我在使用 WINAPI 打印时遇到问题。有这台打印机,DS40,这台打印机提供两种不同的“纸张尺寸”(6x4“,6x4”x2),它们的尺寸完全相同,但每个都有点不同(我认为这背后的原因很难解释这里没有必要这样做)。

对于打印,我使用的是 Qt 框架,它使用的是 GDI 打印 API。但是,我选择哪种纸张变体并不重要,它总是使用相同的。

查看Qt的源代码,发现它是通过这个结构传递纸张大小的:https://msdn.microsoft.com/en-us/library/windows/desktop/dd183565%28v=vs.85%29.aspx,即成员dmPaperWidth和dmPaperLength。

现在,我如何区分这两种纸张尺寸变体?

【问题讨论】:

  • 从您提供的链接中尝试:“dmDefaultSource 指定纸张来源。要检索打印机的可用纸张来源列表,请使用带 DC_BINS 标志的 DeviceCapabilities 函数。此成员可以是以下成员之一以下值,或者它可以是大于或等于 DMBIN_USER 的特定于设备的值。"
  • 论文不因来源而异。来源始终相同。

标签: c++ winapi printing gdi


【解决方案1】:

DEVMODE structure 的文档中所述:

dmPaperWidth/dmPaperLength 覆盖dmPaperSize

要选择特定的dmPaperSize(例如 A4、Letter、Legal 等),请使用以下设置:

  • dmFields |= DM_PAPERSIZE
  • dmPaperSize = papersize_index

  • 不要在dmFields标志中使用DM_PAPERWIDTHDM_PAPERLENGTH

您可以使用DeviceCapabilitiesDC_PAPERNAMES 获取当前打印机支持的纸张尺寸列表。

【讨论】:

  • 我不确定,但如果我理解文档正确,dmPaperSize 仅用于预定义的纸张尺寸,例如 A4、Letter 等。这意味着我不能设置 6x4'' 或 6x4 ''x2 使用那个。
  • 好吧,我的错,看起来它正在使用 dmPaperSize :) 只有 Qt 为这两个选项发送相同的值。
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多