在WPF 中可以通过 类方便的实现应用程序打印功能,本文将使用一个简单实例进行演示。首先在VS中编辑一个图形(如下图所示)。
将需要打印的内容放入同一个<Canvas>中,并起名为“printArea”,打印按键一般不是我们希望打印出来的内容,则将其放在<Canvas>外面。
接下来编写Button_Click 事件,由于我们要打印<Canvas>所包含的内容,所以要通过PrintVisual 打印Visual 对象。
private void Button_Click(object sender, RoutedEventArgs e){ PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { dialog.PrintVisual(printArea, "Print Test"); }}
运行程序,点击“Print”按键,弹出打印设置窗口,打印到XPS看看效果。
如下图所示,打印结果中只有<Canvas>中的内容。
WPF 打印控件 无弹框打印
WPF中打印用到了 PrintDialog类。
其中设置打印属性的是PrintTicket,管理打印机的是PrintQueue。
实例如下:
public class PrintDialogHelper{private const string PrintServerName = "YULIN-PC";private const string PrintName = "HP LaserJet M1522 series PCL6 Class Driver";public PrintDialogHelper(){}////// 打印控件/// /// public void PrintVisual(FrameworkElement element){var printDialog = new PrintDialog();SetPrintProperty(printDialog);var printQueue = SelectedPrintServer(PrintServerName, PrintName);if (printQueue != null){printDialog.PrintQueue = printQueue;printDialog.PrintVisual(element, "");}}////// 查找并获取打印机/// /// 服务器名字: Lee-pc/// 打印机名字:Hp laserjet m1522 mfp series pcl 6 ///public PrintQueue SelectedPrintServer(string printerServerName, string printerName){try{var printers = PrinterSettings.InstalledPrinters;//获取本机上的所有打印机PrintServer printServer = null;foreach (string printer in printers){if (printer.Contains(printerName))printServer = new PrintServer("\\\\" + printerServerName);}if (printServer == null) return null;//没有找到打印机服务器var printQueue = printServer.GetPrintQueue(printerName);return printQueue;}catch (Exception){return null;//没有找到打印机}}/// /// 设置打印格式/// /// 打印文档/// 打印纸张大小 a4/// 打印方向 竖向public void SetPrintProperty(PrintDialog printDialog, PageMediaSizeName pageSize = PageMediaSizeName.ISOA4, PageOrientation pageOrientation = PageOrientation.Portrait){var printTicket = printDialog.PrintTicket;printTicket.PageMediaSize = new PageMediaSize(pageSize);//A4纸printTicket.PageOrientation = pageOrientation;//默认竖向打印}}