www.pudn.com > Cnewprint.rar > WinPrinterPageSetting.cs


using System; 
using System.Drawing; 
using System.Drawing.Printing; 
using System.Windows.Forms; 
 
namespace GoldPrinter 
{ 
	///  
	/// WinForm下的打印纸张设置、打印机设置、打印预览对话框。 
	///  
	/// 程序提供:周方勇;Email:flygoldfish@sina.com。 
	/// 请 关 注:WebMIS.Net快速开发工具,不写一行程序开发B/S架构下MIS、OA、CRM、人事管理、档案管理等数据库网页系统。简单、实用、稳定、可靠。 
	/// 下    载: 
	///			 上海奥联:WWW.AlinkSoft.COM 
	///			 用友华表:WWW.CellSoft.CC 
	///★★★★★您可以免费使用此程序,但是请您保留此说明,以维护知识产权★★★★★ 
	///  
	public class WinPrinterPageSetting:IPrinterPageSetting 
	{ 
		//把PrintPage委托声明为类的一个成员变量 
		private PrintPageDelegate _printPage;		 
		// 打印文档 
		private PrintDocument _printDocument; 
 
		#region	构造函数 
		public WinPrinterPageSetting():this(null) 
		{ 
			 
		} 
 
		///  
		/// 使用printDocument来初始化类的新实例,当printDocument为null时自动创建一个printDocument的实例 
		///  
		///  
		public WinPrinterPageSetting(PrintDocument printDocument) 
		{ 
			if (printDocument != null) 
			{ 
				_printDocument = printDocument; 
			} 
			else 
			{ 
				_printDocument = new PrintDocument(); 
			} 
		} 
		#endregion 
 
 
		#region IPrinterPageSetting 成员 
 
		///  
		/// 获取或设置打印文档 
		///  
		public PrintDocument PrintDocument 
		{ 
			get 
			{ 
				return this._printDocument; 
			} 
			set 
			{ 
				this._printDocument = value; 
			} 
		} 
 
		///  
		/// 一定要实例化此类后在调用打印/预览之前设置此属性,使之关联一个方法,目的是让具体的打印由实例化者来操作 
		/// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler); 
		///  
		public PrintPageDelegate PrintPage 
		{ 
			set 
			{	 
				//初始委托变量,关联方法 
				_printPage = value; 
				 
				if (_printDocument==null) 
				{ 
					throw new Exception("关联的打印文档不能为空!"); 
				} 
				_printDocument.PrintPage +=new System.Drawing.Printing.PrintPageEventHandler(this._printPage); 
			} 
			get 
			{ 
				return _printPage; 
			}		 
		} 
 
		///  
		/// 显示页面设置对话框,并返回PageSettings 
		///  
		///  
		public PageSettings ShowPageSetupDialog() 
		{ 
			return ShowPageSetupDialog(this._printDocument); 
		} 
 
		///  
		/// 显示打印机设置对话框,并返回PrinterSettings 
		///  
		///  
		public PrinterSettings ShowPrintSetupDialog() 
		{ 
			return ShowPrintSetupDialog(this._printDocument); 
		} 
 
		///  
		/// 显示打印预览对话框 
		///  
		public void ShowPrintPreviewDialog() 
		{ 
			ShowPrintPreviewDialog(this._printDocument); 
		} 
 
		#endregion 
 
 
	 
		//***************注意:以下几个对话框方法可以独立使用*************** 
		#region 页面设置对话框 protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument) 
		///  
		/// 页面设置对话框,可以独立使用 
		///  
		///  
		///  
		///  
		/// 作    者:周方勇 
		/// 修改日期:2004-08-07 
		///  
		protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument) 
		{ 
			//声明返回值的PageSettings 
			PageSettings ps = new PageSettings(); 
 
			if (printDocument==null) 
			{ 
				throw new Exception("关联的打印文档不能为空!"); 
			} 
 
			try 
			{ 
				//申明并实例化PageSetupDialog 
				PageSetupDialog psDlg = new PageSetupDialog(); 
				 
				//相关文档及文档页面默认设置 
				psDlg.Document = printDocument; 
				psDlg.PageSettings = printDocument.DefaultPageSettings; 
 
				//显示对话框 
				DialogResult result = psDlg.ShowDialog(); 
				if (result == DialogResult.OK) 
				{ 
					ps = psDlg.PageSettings; 
					printDocument.DefaultPageSettings = psDlg.PageSettings; 
				} 
 
			} 
			catch(System.Drawing.Printing.InvalidPrinterException e) 
			{ 
				MessageBox.Show("未安装打印机,请进入系统控制面版添加打印机!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
			catch(Exception ex) 
			{ 
				MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
 
			return ps; 
		} 
		#endregion 
 
 
		#region 打印设置对话框 protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument) 
		///  
		/// 打印设置对话框,可以独立使用 
		///  
		///  
		///  
		///  
		/// 作    者:周方勇 
		/// 修改日期:2004-08-07 
		///  
		protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument) 
		{ 
			//声明返回值的PrinterSettings 
			PrinterSettings ps = new PrinterSettings(); 
			if (printDocument==null) 
			{ 
				throw new Exception("关联的打印文档不能为空!"); 
			} 
 
			try 
			{ 
				//申明并实例化PrintDialog 
				PrintDialog pDlg = new PrintDialog(); 
				 
				//可以选定页 
				pDlg.AllowSomePages = true; 
 
				//指定打印文档 
				pDlg.Document = printDocument; 
 
				//显示对话框 
				DialogResult result = pDlg.ShowDialog(); 
				if (result == DialogResult.OK) 
				{ 
					//保存打印设置 
					ps = pDlg.PrinterSettings; 
					//打印 
					printDocument.Print(); 
				} 
 
			} 
			catch(System.Drawing.Printing.InvalidPrinterException e) 
			{ 
				MessageBox.Show("未安装打印机,请进入系统控制面版添加打印机!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
			catch(Exception ex) 
			{ 
				MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
 
			return ps; 
		} 
		#endregion 
 
 
		#region 打印预览对话框 protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument) 
		///  
		/// 打印预览对话框,可以独立使用 
		///  
		///  
		///  
		///  
		/// 作    者:周方勇 
		/// 修改日期:2004-08-07 
		///  
		protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument) 
		{ 
			if (printDocument==null) 
			{ 
				throw new Exception("关联的打印文档不能为空!"); 
			} 
 
			try 
			{ 
				//申明并实例化PrintPreviewDialog 
				PrintPreviewDialog ppDlg = new PrintPreviewDialog(); 
				 
				//指定打印文档 
				ppDlg.Document = printDocument;	 
 
		 
				//显示对话框 
				DialogResult result = ppDlg.ShowDialog(); 
				if (result == DialogResult.OK) 
				{ 
					//... 
				} 
 
			} 
			catch(System.Drawing.Printing.InvalidPrinterException e) 
			{ 
				MessageBox.Show("未安装打印机,请进入系统控制面版添加打印机!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
			catch(Exception ex) 
			{ 
				MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning); 
			} 
		} 
		#endregion 
 
	}//End Class 
}//End NameSpace