现在的位置: 首页 > 综合 > 正文

WPF:不显示打印对话框(PrintDialog)直接打印

2012年07月13日 ⁄ 综合 ⁄ 共 1124字 ⁄ 字号 评论关闭

为什么需要显示打印对话框,因为我们不知道用户要用哪个打印机和具体的打印选项,如果我们知道的话,那么就不需要显示这个对话框。

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保存位置,然后打印成功:

image

抱歉!评论已关闭.