gpt4 book ai didi

c++ - 在 Windows 中打印时以编程方式设置每张页数 (N-Up) 选项

转载 作者:可可西里 更新时间:2023-11-01 09:38:57 25 4
gpt4 key购买 nike

我需要一种在打印时以编程方式设置每张页数设置的好方法。

我知道用户可以通过打印机设置对话框选择此选项,如果我愿意,我可以显示这样的对话框。但是在我正在处理的程序的上下文中,我需要由软件本身选择它,而不需要用户深入研究打印机设置。

虽然看起来我可以使用 DEVMODE 结构的 dmNup 成员询问 Windows 打印机是否支持此功能,但实际上似乎没有任何官方方法为当前打印作业设置它。

显然,一种解决方案是更改我的软件中的打印算法,以便它在设备上下文中适本地布置页面,从而在结果输出中获得每张纸的多个页面。但是,我还没有看到任何不需要对绘制到打印机设备上下文的所有代码进行重大更改的简单方法。出于各种原因,我宁愿避免大量的代码更改。

另一种解决方案是在 Windows 中安装打印机的多个拷贝,同时将它们全部定向到同一个打印机端口。打印机的每个拷贝都设置了不同的默认每张页数。然后软件可以选择合适的打印机,最终结果就像它以编程方式选择了每张打印页数选项一样。但是,我在使用此方案时遇到了各种问题,因此我正在寻找一种支持负担较小的替代方案。

This article提供了另一种可能的解决方案:在遵循官方 DEVMODE 结构的私有(private)驱动程序数据中操作适当的字节。问题是不能保证任何特定的打印机驱动程序实际使用相同的字节,我需要支持基本上可以在办公环境中合理使用的任何打印机。看起来我的软件需要一个配置,我可以在其中为不使用默认值的驱动程序指定不同的字节偏移量。这可能很少发生或经常令人头疼,具体取决于有多少打印机驱动程序决定为此设置使用不同的字节。

所以这是我的问题:

  • 有没有人有使用最后一种操纵私有(private)司机数据的技术的实际经验?在处理来自不同制造商的各种打印机时,它的表现如何?
  • 还有其他我忽略的技巧吗?
  • 如果没有别的,那么有什么简单的方法可以将绘制文本、线条、图形等的代码带到打印机设备上下文中,并以某种方式强制它缩放、移动和可能旋转(每张 2 页)输出到设备上下文中的必要位置而不编写所有代码(并且不丢失 1 像素宽的行)?

注意:就其值(value)而言,我正在处理的程序使用的是 C++ 和 MFC。然而,所有这些都应该同样适用于任何处理设备上下文和 Windows API 本身其余部分的程序。

最佳答案

好吧,我已经有一段时间没用过 GDI 和 MFC 了,但过去我用打印机做了很多工作。我倾向于说,由于 GDI 应该从您对特定 API 调用的绘图上下文的知识中抽象出您的程序。但是,可能有一些方法可以做到这一点,不像在结构的私有(private)区域中猛击位那样骇人听闻。

我要做的第一件事是查看 CDC::Escape 方法(或 Escape Win32 API 函数)。在最好的情况下,有一个标准的转义序列可以将打印机设置为 n-up 模式。在最坏的情况下,您必须找到打印机的转义序列并将其原始发送。 (曾几何时,这是让打印机使用其奇特功能的唯一方法。)大多数打印机不久前开始实现语言标准(PCL?HPGL?我忘了是哪个)。如果许多打印机仍然执行标准语言,那么它们可能会理解转义序列。

如果失败,您可能必须在上下文中手动实现您自己的 n-up 绘图,但使用 SetMapMode 之类的东西将单位设置为缇(或任何可行的)并按比例绘制。

否则,请尝试查看 GDI 对缩放所做的操作,看看是否可行。

关于c++ - 在 Windows 中打印时以编程方式设置每张页数 (N-Up) 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com