WPF中的PrintDialog.PrinterSettings等价物

Bri*_*VPS 4 c# printing wpf

我正在尝试为我正在编写的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");
}
Run Code Online (Sandbox Code Playgroud)

此代码的工作原理是它将显示打印对话框,我可以选择我的打印机,将其配置为使用正确的标签库存,然后打印标签.但是,正如其他帖子所示,它不会保存我选择的设置.因此,如果我选择再次打印相同的图像而不关闭其间的应用程序,它将恢复为默认打印机,即使我选择了正确的打印机,也会将该打印机默认设置为默认设置,其中包括使用错误尺寸的标签库存.因此,每次打印时,我都必须选择打印机并将其配置为使用正确的库存.这在现实世界中是不可接受的.

经过大量的在线搜索,我发现了很多关于这个的帖子,但他们都讨论了保存PrintDialog.PrinterSettings对象,然后使用它来初始化下一个PrintDialog实例.但是,在WPF中,没有该类的PrinterSettings成员PrintDialog.这是一个Win Forms对象.为什么Win Forms和WPF PrintDialog对象不同,超出我的意见,但这可能是一个无法回答的问题.真正的问题是我现在做的事情.如有必要,我可以重新发明整个轮子并拥有自己的打印机选择器和打印机配置页面,并使用PrintDocument对象打印图像并PrintDialog完全绕过.除非完全有必要,否则我宁愿不这样做.显示PrintDialog很好,这是人们习惯的,它已经具备了内置打印机的所有能力.但是如何初始化PrintDialogWPF以选择合适的打印机并使用正确的打印机设置?如果我只使用Windows窗体,那么它将被内置.什么是WPF等价物?

第二个问题是,如果没有WPF等价物,建议的方法是什么?我真的不需要让用户能够在我的应用程序中配置打印机.我想要它做的就是记住他们下次打印时选择的先前设置,就像之前编写过的每一个其他PC应用程序一样.怎么会这么难?

任何人都可以提供任何帮助将不胜感激.与此同时,我正在重新发明谚语轮的道路上.我希望很快能得到一个更简单的答案.

谢谢!

Den*_*nis 6

WPF具有PrintTicketPrintQueue类(并PrintDialog具有相应的属性,可以使用您保存的设置进行初始化).

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