我正在尝试向我正在编写的 C# WPF 应用程序添加打印支持,对此我感到抓狂。我正在尝试从 WPF 应用程序中的窗口打印单个图像。该图像是运输标签,打印机是装有 4"x6" 运输标签纸的热敏打印机。打印的代码如下:
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
Image tmpImage = new Image();
tmpImage.Stretch = Stretch.Uniform;
tmpImage.Width = pd.PrintableAreaWidth;
tmpImage.Source = this.img_label.Source;
tmpImage.Measure(new Size(pd.PrintableAreaWidth, pd.PrintableAreaHeight));
tmpImage.Arrange(new Rect(new Point(0, 0), tmpImage.DesiredSize));
pd.PrintVisual(tmpImage, "Shipping Label");
}
此代码的工作原理是,它将显示打印对话框,我可以选择我的打印机,将其配置为使用正确的标签纸,然后打印标签。但是,正如其他帖子所示,它不会保存我选择的设置。因此,如果我选择再次打印相同的图像而不关闭应用程序,它会恢复为默认打印机,即使我选择了正确的打印机,也会将该打印机默认为默认设置,其中包括使用错误尺寸的标签纸。因此,每次打印时,我都必须选择打印机并将其配置为使用正确的库存。这在现实世界的使用中根本不可接受。
经过在网上大量搜索后,我发现了很多关于此的帖子,但它们都谈到了保存PrintDialog.PrinterSettings
对象,然后使用它来初始化下一个PrintDialog
实例。然而,在WPF中,没有PrinterSettings
的成员PrintDialog
班级。那是一个 Win Forms 对象。为什么 Win Forms 和 WPF PrintDialog 对象不同,我无法理解,但这可能是一个无法得到解答的问题。真正的问题是我现在做什么。如果有必要,我可以重新发明整个轮子,拥有自己的打印机选择器和打印机配置页,并使用PrintDocument
对象并绕过PrintDialog
完全。除非完全必要,否则我宁愿不这样做。显示PrintDialog
很好,这是人们所习惯的,并且它已经具有配置内置打印机的所有功能。但是我如何初始化PrintDialog
在 WPF 中选择正确的打印机并使用正确的打印机设置?如果我使用的是 Windows 窗体,那么这将是内置的。WPF 的等效项是什么?
第二个问题是,如果没有 WPF 等效项,建议的处理方法是什么?我真的不需要让用户能够在我的应用程序中配置打印机。我想要它做的就是记住他们在下次打印时选择的先前设置,就像曾经编写的所有其他 PC 应用程序一样。这怎么这么难呢?
任何人可以提供的任何帮助将不胜感激。与此同时,我正在走上重新发明众所周知的轮子的道路。我希望尽快得到更简单的答案。
Thanks!
WPF has PrintTicket http://msdn.microsoft.com/en-us/library/system.printing.printticket.aspx and PrintQueue http://msdn.microsoft.com/en-us/library/system.printing.printqueue.aspx类(和PrintDialog
有相应的属性,可以使用您保存的设置进行初始化)。
为简单起见,您可以将第一个设置视为纸张设置,将第二个设置视为打印机设置(选定的打印机)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)