.Net环境下有关打印页面设置、打印机设置、打印预览对 - 程序开发 - ASP.NET教程
.Net环境下有关打印页面设置、打印机设置、打印预览对 - 程序开发 -
ASP.NET教程
本文《.Net环境下有关打印页面设置、打印机设置、打印预览对 - 程序开发 - ASP.NET教程》关键词:程序开发 ASP.NET教程
p; }
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
大家可以看到了#region指定,它与#endregion一起使用,可以把中间的文本折叠起来,很方便,需要查看的时候就单击前面的展开符号。后三个函数是比较重要的
,同时提供它们的重载函数。ShowPageSetupDialog()与ShowPrintSetupDialog()返回用户确认的当前设置选择。
再建立一个类文件,名称为WebPrinterPageSetting。进入文件后,在类声明后面加上:IPrinterPageSetting,实现接口功能。程序清单如下:
using System;
namespace GoldPrinter
{
///
/// WebForm下的打印纸张设置、打印机设置、打印预览对话框。(***暂无具体实现***)
///
public class WebPrinterPageSetting:IPrinterPageSetting
{
public WebPrinterPageSetting()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region IPrinterPageSetting 成员
public System.Drawing.Printing.PrintDocument PrintDocument
{
get
{
// TODO: 添加 WebPrinterPageSetting.PrintDocument getter 实现
return null;
}
set
{
// TODO: 添加 WebPrinterPageSetting.PrintDocument setter 实现
}
}
public PrintPageDelegate PrintPage
{
get
{
// TODO: 添加 WebPrinterPageSetting.PrintPage getter 实现
return null;
}
set
{
// TODO: 添加 WebPrinterPageSetting.PrintPage setter 实现
}
}
public System.Drawing.Printing.PageSettings ShowPageSetupDialog()
{
// TODO: 添加 WebPrinterPageSetting.ShowPageSetupDialog 实现
return null;
}
public System.Drawing.Printing.PrinterSettings ShowPrintSetupDialog()
{
// TODO: 添加 WebPrinterPageSetting.ShowPrintSetupDialog 实现
return null;
}
public void ShowPrintPreviewDialog()
{
// TODO: 添加 WebPrinterPageSetting.ShowPrintPreviewDialog 实现
}
#endregion
}//End Class
}//End NameSpace
做到了这一步,大家可能说已经可以了,确实如此。因为在调用的时候实例化WinPrinterPageSetting/We
bPrinterPageSetting并调用它的方法或属性就可以了。大家再想想我为什么要提供IPrinterPageSetting呢,如果我现在调用打印对话框,我也不管是Windows下还是Web下的,这时,IPrinterPageSetting就发挥了作用。
例如:
IPrinterPageSetting _printerPageSetting;
申明了一个打印接口对象,以后就可以直接调用它的方法了,但是到底是Windows模式还是Web模式呢,我们只需要让程序自己去根据系统去实例为真正的WinPrinterPageSetting或WebPrinterPageSetting了。如: //创建接口对象的新实例,使其指象真正的实现其接口的对象
if (Windows模式)
{
_printerPageSetting = new WinPrinterPageSetting(); }
else if(Web模式)
{
_printerPageSetting = new WebPrinterPageSetting(); }
在接下来的程序清单中我们可以看到这个效果。我们再建立一个PrinterPageSetting类,将WinPrinterPageSetting与WebPrinterPageSetting合二为一。在类的构造函数中增加自动判断Windows模式还是Web模式,同时也提供PrintMode属性可以让用户修改。程序清单如下:
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace GoldPrinter
{
///
/// 打印方式
///
public enum PrintModeFlag
{
///
/// Windows窗口打印方式
///
Win
,
///
/// Web窗口打印方式
///
Web
}
///
/// 封装页面设置、打印机设置、打印预览,适合于Window和Asp.Net。
/// 程序提供:周方勇;Email:flygoldfish@sina.com。
///
public class PrinterPageSetting
{
//申明一个封装页面设置、打印机设置、打印预览的接口
private IPrinterPageSetting _printerPageSetting;
//打印方式
private PrintModeFlag _printModeFlag;
public PrintModeFlag PrintMode
{
get
{
return this._printModeFlag;
}
set
{
this._printModeFlag = value;
//运用了抽象模式,创建接口对象的新实例,使其指象真正的实现其接口的对象
if (this._printModeFlag == PrintModeFlag.Win)
{
_printerPageSetting = new WinPrinterPageSetting();
}
else if(this._printModeFlag == PrintModeFlag.Web)
{
_printerPageSetting = new WebPrinterPageSetting();
}
}
}
///
/// 获取或设置打印文档
///
public PrintDocument PrintDocument
{
get
{
return _printerPageSetting.PrintDocument;
}
set
{
_printerPageSetting.PrintDocument = value;
}
}
///