之前写程序,调用Microsoft.Office.Interop.Word动态生成doc文档并打印。
由于在打印时直接实例化一个Word.Document对象,并使用其PrintOut()方法打印,未设置Word.Application的ActivePrinter属性,导致打印时只能使用默认打印机打印,后来在窗体上加了一个下拉框,可以选择要使用的打印机,这样一来就方便多了。
从网上借段代码,实现起来很简单:
- 引用一下System.Drawing.Printing,加一个string类型的全局变量oldActivePrn,用来保存目前系统设置的默认打印机名称;
- 在Form_Load里面遍历系统中已安装的打印机,放到ComboBox中,代码:
int i;string pkInstalledPrinters;using (PrintDocument pd = new PrintDocument()){for (i = 0; i < PrinterSettings.InstalledPrinters.Count; i++) //开始遍历{pkInstalledPrinters = PrinterSettings.InstalledPrinters[i]; //取得名称cmbPrinterList.Items.Add(pkInstalledPrinters); //加入ComboBoxif (pd.PrinterSettings.IsDefaultPrinter) //判断是否为默认打印机{OldActPrn = pd.PrinterSettings.PrinterName; //保存名称,后面要用cmbPrinterList.Text = pd.PrinterSettings.PrinterName; //显示默认打印机名称}}}
- 实例化Word.Application对象WordApp,实例化Wod.Document对象oDoc,在oDoc.PrintOut()之前,将WordApp.ActivePrinter设置为cmbPrinterList.Text,即将系统默认打印机设置为ComboBox中选择的打印机,然后开始打印,打印完毕,再将WordApp.ActivePrinter改回到OldActPrn即可。
这样一来,不用到系统的“打印机”窗口设置默认打印机就可以随意指定打印机打印了。