为什么需要显示打印对话框,因为我们不知道用户要用哪个打印机和具体的打印选项,如果我们知道的话,那么就不需要显示这个对话框。
WPF中PrintDialog(在System.Windows.Controls命名空间内)储存用户选择的属性是PrintQueue和PrintTicket属性,分别代表用户选择的打印机和打印选项。
注意:
下面代码需要引用:System.Printing.dll
并且在代码上加入命名空间:using System.Printing;
获取当前系统的默认打印机可以通过LocalPrintServer.GetDefaultPrintQueue()方法,这样的话可以用默认打印机直接打印。
也可以已通过LocalPrintServer.GetPrintQueues获取本机内打印机,然后帅选需要的打印机(或者通过PrintServer.GetPrintQueues获取工作组中的打印机)。
下面代码,将会自动通过系统自带的Microsoft XPS Document Writer打印机来打印一段文字:
//注意需引用System.Printing.dll且加入using System.Printing;
//初始化PrintDialog
var printDialog = new PrintDialog();
//从本地计算机中获取所有打印机对象(PrintQueue)
var printers = new LocalPrintServer().GetPrintQueues();
//选择一个打印机
var selectedPrinter = printers.FirstOrDefault(p => p.Name == "Microsoft XPS Document Writer");
if (selectedPrinter == null)
{
MessageBox.Show("没有找到Microsoft XPS Document Writer打印机");
return;
}
//设置打印机
printDialog.PrintQueue = selectedPrinter;
//创建要打印的内容
var tbl = new TextBlock(new Run("来自:Mgen!"));
var size = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
tbl.Measure(size);
tbl.Arrange(new Rect(new Point(0, 0), size));
//打印
printDialog.PrintVisual(tbl, "测试");
代码运行后,直接选择XPS保存位置,然后打印成功: