开源:.NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
我个人认为,开发MIS,首先就得解决网格的问题,而开发工具为我们提供了如DataGrid、MSHFlexGrid的控件。其次,是打印的问题,将业务单据与数据报表打印出来。可想而知,即使一个业务功能非常完美齐全的管理软件,没有打印的支持,也一定不算是一个完整的软件。
对于打印,我们总是在用户打印之前可以看看打印的效果,这时,一般的软件都提供了打印预览;如果需要调整打印的效果如纸张的大小、边距的设置,又提供了页面设置对话框让用户选择和调整;如果系统有多个打印机,当用户单击打印按钮时还可以选择输出的对象。
总之,对于打印,我们至少要提供打印页面设置、打印机设置、打印预览对话框,让用户有更多的机会参与交互。这一些,是一个打印模块比较重要也比较基本的东西,让我们一起来实现它们吧。
进入Vs2003 IDE,从文件菜单上单击新建项目,项目类型为C#,在模板中选择类库,名称估且叫GoldPrinter,确定即可。在打开的开发环境中,删除解决方案资源管理器中默认生成的Class1.cs。
现在,我们要考虑一下,对于打印,可能是在Windows下,也可能是Web下。如果将两者的方法统一起来,让调用者不用操心是什么方式下那该多好啊。因此,我们首先设计一个接口,提供两者共用的方法。
在项目上鼠标右键单击后添加一个新类,名称为:IPrinterPageSetting,由于是接口,将class改为interface,并去掉构造函数。看上去应类似如下:
using System;
namespace GoldPrinter
{
/// <summary>
/// IPrinterPageSetting 的摘要说明。
/// </summary>
public class IPrinterPageSetting
{
}
}
方法中至少包含三个声明即ShowPageSetupDialog()、ShowPrintSetupDialog()、ShowPrintPreviewDialog(),也就是打开打印页面设置、打印机设置、打印预览对话框。
Vs2003为我们提供了一个PrintDocument,名字空间是System.Drawing.Printing。PrintDocument是为打印而提供的一个类,它的概述(summary)是这样的:定义一个可再次使用的对象,该对象将输出发送到打印机。
PrintDocument为我们封装了很多复杂的细节,它有一个至关重要的事件叫PrintPage,PrintPage的概述是:当需要为当前页打的输出时发生。因此,我们只要引发了打印事件,把打印的具体输出的对象交给PrintPage,别的我们就不用操心了。
那么,我们怎么实现具体输出的过程呢?由于是封装,我们也不可能知道最终用户具体怎么去实现,这时,委托(Delegate)为我们起了大的作用。大家都知道一个函数实现某个功能的时候往往需要一些输入的数据,但是函数本身并不知道这些数据到底是哪个具体的值,只知道这个值的数据类型,这时引入了参数,调用者调用函数据的时候传入相应类型的具体值就行了。大家应该意识到了我的用意,与函数类似,我们为打印提供了关联打印机的方法,但是具体的实现只有由调用者去实现,不同之处是函数传递的是参数,而我们要做的委托传递的是方法。这时,我们只要为两者建立对应关系就可以了,这就是委托。我们需要定义一个委托,参数类型与PrintPage的一致就可以了,即(Object obj,System.Drawing.Printing.PrintPageEventArgs ev)。
由此可见,我们需要做下面的一些事情:
1、在项目的引用处添加引用,在弹出的对话框的.NET标签中选择System.Drawing.dll,
原因是PrintDocument的名字空间是System.Drawing.Printing,在System.Drawing.dll实现;
2、在IPrinterPageSetting接口中增加PrintDocument属性的声明;
3、定义委托
4、在IPrinterPageSetting接口中增加PrintPage属性的声明,类型为定义的委托;
以下是IPrinterPageSetting接口文件内容:
using System;
using System.Drawing;
using System.Drawing.Printing;
namespace GoldPrinter
{
/// <summary>
/// PrintDocument.PrintPage的委托定义
/// </summary>
public delegate void PrintPageDelegate(Object obj,System.Drawing.Printing.PrintPageEventArgs ev) ;
/// <summary>
/// IPrinterPageSetting 的接口,显示打印纸张设置、打印机设置、打印预览对话框。
/// 程序提供:周方勇;Email:flygoldfish@sina.com。
/// </summary>
public interface IPrinterPageSetting
{
/// <summary>
/// 获取或设置打印文档
/// </summary>
System.Drawing.Printing.PrintDocument PrintDocument
{
get;
set;
}
/// <summary>
/// 关联一个方法,目的是让具体的打印由实例化者来操作
/// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
/// </summary>
PrintPageDelegate PrintPage
{
get;
set;
}
/// <summary>
/// 显示页面设置对话框,并返回PageSettings
/// </summary>
/// <returns></returns>
System.Drawing.Printing.PageSettings ShowPageSetupDialog();
/// <summary>
/// 显示打印机设置对话框,并返回PrinterSettings
/// </summary>
/// <returns></returns>
System.Drawing.Printing.PrinterSettings ShowPrintSetupDialog();
/// <summary>
/// 显示打印预览对话框
/// </summary>
void ShowPrintPreviewDialog();
}//End Interface
}//End NameSpace
下面,我们以Windows下的编程方式实现,同时也列Web编程下的框架。由于是Windows下的编程,我们可能用到对话框什么的作为错误提示,因此,我们同理要加入System.Windows.Forms.dll引用。再建立一个类文件,名称为WinPrinterPageSetting。进入文件后,在类声明后面加上:IPrinterPageSetting,实现接口功能。程序清单如下,程序中有很多注释,这里不再多说。
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace GoldPrinter
{
/// <summary>
/// WinForm下的打印纸张设置、打印机设置、打印预览对话框。
/// </summary>
public class WinPrinterPageSetting:IPrinterPageSetting
{
//把PrintPage委托声明为类的一个成员变量
private PrintPageDelegate _printPage;
// 打印文档
private PrintDocument _printDocument;
#region 构造函数
public WinPrinterPageSetting():this(null)
{
}
/// <summary>
/// 使用printDocument来初始化类的新实例,当printDocument为null时自动创建一个printDocument的实例
/// </summary>
/// <param name="printDocument"></param>
public WinPrinterPageSetting(PrintDocument printDocument)
{
if (printDocument != null)
{
_printDocument = printDocument;
}
else
{
_printDocument = new PrintDocument();
}
}
#endregion
#region IPrinterPageSetting 成员
/// <summary>
/// 获取或设置打印文档
/// </summary>
public PrintDocument PrintDocument
{
get
{
return this._printDocument;
}
set
{
this._printDocument = value;
}
}
/// <summary>
/// 一定要实例化此类后在调用打印/预览之前设置此属性,使之关联一个方法,目的是让具体的打印由实例化者来操作
/// 如PrinterPageSetting1.PrintPage += new PrintPageDelegate(this.PrintPageEventHandler);
/// </summary>
public PrintPageDelegate PrintPage
{
set
{
//初始委托变量,关联方法
_printPage = value;
if (_printDocument==null)
{
throw new Exception("关联的打印文档不能为空!");
}
_printDocument.PrintPage +=new System.Drawing.Printing.PrintPageEventHandler(this._printPage);
}
get
{
return _printPage;
}
}
/// <summary>
/// 显示页面设置对话框,并返回PageSettings
/// </summary>
/// <returns></returns>
public PageSettings ShowPageSetupDialog()
{
return ShowPageSetupDialog(this._printDocument);
}
/// <summary>
/// 显示打印机设置对话框,并返回PrinterSettings
/// </summary>
/// <returns></returns>
public PrinterSettings ShowPrintSetupDialog()
{
return ShowPrintSetupDialog(this._printDocument);
}
/// <summary>
/// 显示打印预览对话框
/// </summary>
public void ShowPrintPreviewDialog()
{
ShowPrintPreviewDialog(this._printDocument);
}
#endregion
//***************注意:以下几个对话框方法可以独立使用***************
#region 页面设置对话框 protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
/// <summary>
/// 页面设置对话框,可以独立使用
/// </summary>
/// <param name="printDocument"></param>
/// <returns></returns>
/// <remarks>
/// 作 者:周方勇
/// 修改日期:2004-08-07
/// </remarks>
protected virtual PageSettings ShowPageSetupDialog(PrintDocument printDocument)
{
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
if (printDocument==null)
{
throw new Exception("关联的打印文档不能为空!");
}
try
{
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
//相关文档及文档页面默认设置
psDlg.Documen
没有合适的资源?快使用搜索试试~ 我知道了~
基于C#+ASP.NET实现的MISGoldPrinter金质打印通类库代码
共110个文件
cs:48个
dll:13个
resx:10个
4星 · 超过85%的资源 需积分: 48 134 下载量 25 浏览量
2008-09-12
17:46:57
上传
评论 8
收藏 1.35MB RAR 举报
温馨提示
MISGoldPrinter金质打印通源代码控件,功能强大,实现复杂的中国式统计报表,与Excel紧密集成!
资源推荐
资源详情
资源评论
收起资源包目录
基于C#+ASP.NET实现的MISGoldPrinter金质打印通类库代码 (110个子文件)
App.config 149B
frmInvoice.cs 47KB
DrawGrid.cs 30KB
MisGoldPrinter.cs 27KB
GridBase.cs 21KB
ExcelBase.cs 18KB
frmCompletePrint.cs 12KB
GoldGrid.cs 11KB
WinPrinterPageSetting.cs 11KB
frmEasyPrint.cs 11KB
frmAbout.cs 11KB
ExcelAccess.cs 9KB
frmExcelPrint.cs 9KB
ChineseMoney.cs 7KB
DrawRectangle.cs 7KB
GridEnum.cs 6KB
Printer.cs 6KB
PrinterBase.cs 6KB
PrinterMargins.cs 6KB
Sewing.cs 5KB
DataGridViewListViewHelper.cs 5KB
IGrid.cs 5KB
Outer.cs 5KB
PrinterPageSetting.cs 5KB
DrawText.cs 4KB
Top.cs 3KB
Caption.cs 3KB
MultiHeader.cs 3KB
DrawBase.cs 3KB
AssemblyInfo.cs 2KB
PrinterTabStops.cs 2KB
PrinterSingleton.cs 2KB
WebPrinterPageSetting.cs 2KB
AssemblyInfo.cs 2KB
IPrinterPageSetting.cs 2KB
Title.cs 2KB
Body.cs 1KB
CellRectangle.cs 1KB
Exception.cs 1KB
PrintDataSource.cs 1KB
IDraw.cs 1KB
Header.cs 1KB
Exception.cs 821B
Enum.cs 813B
TimeDef.cs 776B
Delegate.cs 577B
Footer.cs 575B
Bottom.cs 528B
Enum.cs 494B
GoldPrinter.csproj 12KB
MISGoldPrinter(CS版).csproj 7KB
Interop.Excel.dll 1.04MB
Interop.Excel.dll 924KB
Interop.Excel.dll 924KB
Interop.Excel.dll 924KB
Interop.Microsoft.Office.Core.dll 212KB
Interop.Microsoft.Office.Core.dll 212KB
Interop.Microsoft.Office.Core.dll 212KB
Interop.Office.dll 152KB
GoldPrinter.dll 88KB
Interop.VBIDE.dll 56KB
Interop.VBIDE.dll 56KB
Interop.VBIDE.dll 56KB
Interop.VBIDE.dll 56KB
VS.NET打印思想与终极实现.htm 27KB
App.ico 1KB
GoldPrinter.pdb 570KB
frmInvoice.resx 49KB
frmInvoice.resx 49KB
frmAbout.resx 14KB
frmAbout.resx 14KB
frmEasyPrint.resx 13KB
frmEasyPrint.resx 13KB
frmCompletePrint.resx 9KB
frmCompletePrint.resx 9KB
frmExcelPrint.resx 9KB
frmExcelPrint.resx 9KB
MISGoldPrinter.sln 2KB
MISGoldPrinter.sln 2KB
GoldPrinter.sln 1009B
MISGoldPrinter(VB版).sln 925B
MISGoldPrinter.sln 925B
MISGoldPrinter.suo 13KB
MISGoldPrinter.suo 13KB
MISGoldPrinter.suo 13KB
PrinterPageSetting.suo 10KB
GoldPrinter.suo 8KB
MISGoldPrinter(VB版).suo 7KB
0.有关打印对话框的实现.txt 18KB
1.有关打印对话框的应用.txt 14KB
2.开源MIS金质打印通原理及实现Step by step 1 之原理篇.txt 6KB
GoldPrinter.csproj.user 2KB
MISGoldPrinter(VB版).vbproj.user 2KB
MISGoldPrinter(CS版).csproj.user 2KB
frmInvoice.vb 50KB
frmAbout.vb 18KB
frmCompletePrint.vb 12KB
frmEasyPrint.vb 11KB
frmExcelPrint.vb 9KB
PrintDataSource.vb 1KB
共 110 条
- 1
- 2
领君2018
- 粉丝: 204
- 资源: 1527
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 实验项目一:线性表(模板 ).docx
- 基于LM317A设计交流220V输入可调5V-12V直流输出稳压电源电路multisim10仿真源文件.zip
- Screenshot_2024-04-25-17-04-18-55_2332cb9b27b851b548ba47a91682926c.jpg
- -基于AVR单片机的LNG加液机控制器设计.pdf
- ThePowerOfNow-EckhartTolle.mobi
- BLOCK_TYPE_HEARTBEAT_D70A3465D4EE4E9_046141_dump_1st.dmp
- 项目方法测试调用接口工具
- studyupdate
- 基于西瓜数据集的决策树实现.zip
- 60套HTML网站源码-响应式-涵盖(简历&作品展示&商业&科技&培训&商城&课设等)-适配移动设备-解压即用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页