www.pudn.com > PrinterPageSetting.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 _printPageValue;
//把导出到Excel委托声明为类的一个成员变量
private ImportExcelDelegate _importExcelValue;
// 打印文档
private PrintDocument _printDocument;
#region 构造函数
public WinPrinterPageSetting():this(null)
{
}
///
/// 使用printDocument来初始化类的新实例,当printDocument为null时自动创建一个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;
}
}
///
/// 一定要实例化此类后在调用打印/预览之前设置此属性,使之关联一个方法,目的是让具体的打印由实例化者来操作。这里当属性使用,其实可以用PrintPage。
/// 意思就是告诉printerPageSetting打印的具体实现过程是PrintPageEventHandler
/// C#调用:
/// PrinterPageSetting1.PrintPageValue = new PrintPageDelegate(this.PrintPageEventHandler);
/// VB调用:
/// Me.printerPageSetting.PrintPageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage)
///
public PrintPageDelegate PrintPageValue
{
set
{
//初始委托变量,关联方法
_printPageValue = value;
_printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this._printPageValue);
}
get
{
return _printPageValue;
}
}
///
/// 当需要为当前页打印的输出时发生,如果对此不了解,就用PrintPageValue赋值也可以
/// C#调用:
/// PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
/// VB调用:
/// Me.printerPageSetting.PrintPageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage)
///
public event PrintPageDelegate PrintPage
{
add
{
_printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(value);
_printPageValue = value;
}
remove
{
_printDocument.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(value);
_printPageValue = null;
}
}
///
/// 导出Excel的实现
///
public ImportExcelDelegate ImportExcelValue
{
set
{
//初始委托变量,关联方法
_importExcelValue = value;
}
get
{
return _importExcelValue;
}
}
///
/// 显示页面设置对话框,并返回PageSettings
///
///
public PageSettings ShowPageSetupDialog()
{
return ShowPageSetupDialog(this._printDocument);
}
///
/// 显示打印机设置对话框,并返回PrinterSettings
///
///
public PrinterSettings ShowPrintSetupDialog()
{
return ShowPrintSetupDialog(this._printDocument);
}
///
/// 显示打印预览对话框
///
public void ShowPrintPreviewDialog()
{
ShowPrintPreviewDialog(this._printDocument);
}
#endregion
#region ***************页面设置\打印设置\打印预览对话框,可以独立使用***************
#region 页面设置对话框 protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
///
/// 页面设置对话框,可以独立使用
///
///
///
///
/// 作 者:周方勇
/// 修改日期:2004-08-07
///
protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
{
//检查printDocument是否为空,空的话抛出异常
ThrowPrintDocumentNullException(printDocument);
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
try
{
//相关文档及文档页面默认设置
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)
{
ShowInvalidPrinterException(e);
}
catch(Exception ex)
{
ShowPrinterException(ex);
}
finally
{
psDlg.Dispose();
psDlg = null;
}
return ps;
}
#endregion
#region 打印设置对话框 protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument)
///
/// 打印设置对话框,可以独立使用
///
///
///
///
/// 作 者:周方勇
/// 修改日期:2004-08-07
///
protected virtual PrinterSettings ShowPrintSetupDialog(PrintDocument printDocument)
{
//检查printDocument是否为空,空的话抛出异常
ThrowPrintDocumentNullException(printDocument);
//声明返回值的PrinterSettings
PrinterSettings ps = new PrinterSettings();
//申明并实例化PrintDialog
PrintDialog pDlg = new PrintDialog();
try
{
//可以选定页
//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)
{
ShowInvalidPrinterException(e);
}
catch(Exception ex)
{
ShowPrinterException(ex);
}
finally
{
pDlg.Dispose();
pDlg = null;
}
return ps;
}
#endregion
private void Excel_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
ToolBarButton tb = e.Button;
string strToolTipText = tb.ToolTipText;
if (strToolTipText == "Import Excel" && (this._importExcelValue != null))
{
//调用
this._importExcelValue.BeginInvoke(sender,null,null,null);
}
}
#region 打印预览对话框 protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument)
///
/// 打印预览对话框,可以独立使用
///
///
///
///
/// 作 者:周方勇
/// 修改日期:2004-08-07
///
protected virtual void ShowPrintPreviewDialog(PrintDocument printDocument)
{
//检查printDocument是否为空,空的话抛出异常
ThrowPrintDocumentNullException(printDocument);
//申明并实例化PrintPreviewDialog
PrintPreviewDialog ppDlg = new PrintPreviewDialog();
//ppDlg.Icon = new Icon("..\\.....myIcon.ico");
ppDlg.Text = "打印预览--欢迎使用"; //PrintPreviewDialog()继承Forms,这里居然看不到这几个属性
ppDlg.WindowState = FormWindowState.Maximized;
//ppDlg.Controls[0].BackColor = Color.Red; //打印预览控件白色纸张区域
if (this._importExcelValue != null)
{
ToolBar tb = (ToolBar)ppDlg.Controls[1]; //打印预览控件ToolBar控制
ToolBarButton toolbtn = new ToolBarButton();
toolbtn.ToolTipText = "Import Excel";
toolbtn.ImageIndex = 2;
tb.ButtonClick +=new ToolBarButtonClickEventHandler(Excel_ButtonClick);
tb.Buttons.Add(toolbtn);
}
try
{
//指定打印文档
ppDlg.Document = printDocument;
//显示对话框
// ppDlg.FindForm().Visible = false;
DialogResult result = ppDlg.ShowDialog();
// ppDlg.FindForm().Visible = true;
if (result == DialogResult.OK)
{
//...
}
}
catch(System.Drawing.Printing.InvalidPrinterException e)
{
ShowInvalidPrinterException(e);
}
catch(Exception ex)
{
ShowPrinterException(ex);
}
finally
{
ppDlg.Dispose();
ppDlg = null;
}
}
#endregion
#region 对话框支持函数据 重构日期:2004-09-03
///
/// 检查printDocument是否为空,空的话抛出异常
///
///
protected virtual void ThrowPrintDocumentNullException(PrintDocument printDocument)
{
if (printDocument==null)
{
throw new Exception("关联的打印文档不能为空!");
}
}
///
/// 显示没安装打印机时的提示信息
///
///
protected virtual void ShowInvalidPrinterException(System.Drawing.Printing.InvalidPrinterException e)
{
MessageBox.Show("未安装打印机,请进入系统控制面版添加打印机!","打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
///
/// 显示打印机其它错误提示信息
///
///
protected virtual void ShowPrinterException(Exception ex)
{
MessageBox.Show(ex.Message,"打印",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
#endregion
#endregion
}//End Class
}//End NameSpace