我正在尝试为正在编写的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");
}

该代码的作用在于它将显示“打印”对话框,我可以选择我的打印机,将其配置为使用正确的标签纸,然后打印标签。但是,正如其他帖子所指出的那样,它不会保存我选择的设置。因此,如果我选择在不关闭应用程序的情况下再次打印同一张图像,它将恢复为默认打印机,即使我选择了正确的打印机,该打印机也会默认为默认设置,包括使用错误尺寸的标签纸。 。因此,每次打印时,我都必须选择打印机并将其配置为使用正确的库存。在现实世界中,这是完全 Not Acceptable 。

在网上进行了大量搜索之后,我发现了很多与此相关的帖子,但是所有这些帖子都谈到保存PrintDialog.PrinterSettings对象,然后使用该对象初始化下一个PrintDialog实例。但是,在WPF中,PrinterSettings类没有PrintDialog成员。那是一个Win Forms对象。为什么Win Forms和WPF PrintDialog对象不同,这超出了我的范围,但这可能是一个无法解决的问题。真正的问题是我现在要做什么。如有必要,我可以重新发明整个轮子,并拥有自己的打印机选择器和打印机配置页,并使用PrintDocument对象打印图像,并完全绕开PrintDialog。除非完全必要,否则我不希望这样做。显示PrintDialog很不错,这是人们所习惯的,并且它已经具有配置内置打印机的全部功能。但是,如何在WPF中初始化PrintDialog以选择正确的打印机并使用正确的打印机设置?如果仅使用Windows窗体,它将被内置。WPF等价于什么?

第二个问题是,如果没有等效的WPF,推荐的处理方式是什么?我真的不需要让用户能够在我的应用程序中配置打印机。我要做的就是记住他们下次打印时选择的先前设置,就像以前编写过的所有其他PC应用程序一样。怎么会这么难?

任何人都可以提供的任何帮助将不胜感激。同时,我正在重新发明众所周知的轮子。我希望很快能得到一个简单的答案。

谢谢!

最佳答案

WPF具有 PrintTicket PrintQueue 类(而PrintDialog具有相应的属性,可以使用保存的设置进行初始化)。

为简单起见,您可以将第一个设置为纸张设置,将第二个设置为打印机设置(选定的打印机)。

关于c# - WPF中的PrintDialog.PrinterSettings等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17912421/

10-13 03:19