Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。
打印操作通常包括以下四个功能
1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等
2 页面设置 设置页面大小纸张类型等
3 打印预览 类似于word中的打印预览
4 打印
实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所
有的与打印有关的事件和方法
这个类包括以下几个属性 事件 和方法
1、PrinterSettings 属性
存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的
2、PrintCountroller 属性
控制打印过程
3、DefaultPageSettings 属性
存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的
4、DocumentName 属性
指定文档名称,出现在打印机状态窗口中
1、BeginPrint事件
在打印之前发出
2. PrintPage事件
每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息
PrintPageEventArgs参数有很多重要的属性
1 Cancel 取消打印
2 Graphics 页面的绘图对象
3 HasMorePages 是否还有要打印的页面
Print 方法 该方法没有参数 调用它将按照当前设置开始打印
若实现打印功能首先构造PrintDocument对象添加打印事件
PrintDocumentprintDocument;
privatevoidInitializeComponent()
{
...
printDocument=newPrintDocument();
printDocument.PrintPage+=newPrintPageEventHandler(this.printDocument_PrintPage);
...
}
实现打印事件功能
打印和绘图类似都是调用Graphics类的方法进行画图不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算
如换行分页等。
privatevoidprintDocument_PrintPage(objectsender,PrintPageEventArgse)
{
Graphicsg=e.Graphics;//获得绘图对象
floatlinesPerPage=0;//页面的行号
floatyPosition=0;//绘制字符串的纵向位置
intcount=0;//行计数器
floatleftMargin=e.MarginBounds.Left;//左边距
floattopMargin=e.MarginBounds.Top;//上边距
stringline=null;行字符串
FontprintFont=this.textBox.Font;//当前的打印字体
SolidBrushmyBrush=newSolidBrush(Color.Black);//刷子
linesPerPage=e.MarginBounds.Height/printFont.GetHeight(g);//每页可打印的行数
//逐行的循环打印一页
while(count<linesPerPage&&((line=lineReader.ReadLine())!=null))
{
yPosition=topMargin+(count*printFont.GetHeight(g));
g.DrawString(line,printFont,myBrush,leftMargin,yPosition,newStringFormat());
count++;
}
如果本页打印完成而line不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中lineReader会
自动读取上次没有打印完的内容因为lineReader是这个打印方法外的类的成员它可以记录当前读取的位置
if(line!=null)
e.HasMorePages=true;
else
e.HasMorePages=false;
}
打印设置,构造打印对话框 将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument
的PrinterSettings属性中
protectedvoidFileMenuItem_PrintSet_Click(objectsender,EventArgse)
{
PrintDialogprintDialog=newPrintDialog();
printDialog.Document=printDocument;
printDialog.ShowDialog();
}
页面设置和打印预览与打印设置原理相同都是构造对话框将用户在对话框中的设置保存到相应的类的属性中
protectedvoidFileMenuItem_PageSet_Click(objectsender,EventArgse)
{
PageSetupDialogpageSetupDialog=newPageSetupDialog();
pageSetupDialog.Document=printDocument;
pageSetupDialog.ShowDialog();
}
打印预览
protectedvoidFileMenuItem_PrintView_Click(objectsender,EventArgse)
{
PrintPreviewDialogprintPreviewDialog=newPrintPreviewDialog();
printPreviewDialog.Document=printDocument;
lineReader=newStringReader(textBox.Text);
try
{
printPreviewDialog.ShowDialog();
}
catch(Exceptionexcep)
{
MessageBox.Show(excep.Message,"打印出错",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
打印就可以直接调用printDocument的Print()方法因为用户可能在打印之前还要再更改打印设置所以
在这里再次显示打印设置对话框
protectedvoidFileMenuItem_Print_Click(objectsender,EventArgse)
{
PrintDialogprintDialog=newPrintDialog();
printDialog.Document=printDocument;
lineReader=newStringReader(textBox.Text);
if(printDialog.ShowDialog()==DialogResult.OK)
{
try
{
printDocument.Print();
}
catch(Exceptionexcep)
{
MessageBox.Show(excep.Message,"打印出错",MessageBoxButtons.OK,MessageBoxIcon.Error);
printDocument.PrintController.OnEndPrint(printDocument,newPrintEventArgs());
}
}
}
总结打印的过程是
1 在应用程序窗体初始化时构造PrintDocument对象 添加 printDocument 的 PrintPage 方法
2 实现PrintPage方法 4 在用户的单击事件中调用 printDocument 的 Print方法实现打印功能
在这中间可能要用到 PrintDialog PrintPreviewDialog PageSetupDialog 设置和查看打印效
果这些方法通常是由菜单的单击触发的。
分享到:
相关推荐
C#.NET开发的MIS打印程序.rar
.net 信息管理系统,类似OA,可以学习学习,真正的三层架构
MIS系统开发与应用(ASP.NET+SQL Server)随书光盘
C#.NET开发的MIS打印程序
ASP.NET开发的一个管理系统框架,C#开发,运行环境:.Net Framework 4.0
ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET 邮件收发 MIS__ 网站.zip ASP.NET ...
特别实用,好用,最全的.NET开源框架,牛逼框架,好框架。框架使用场景:OA、ERP、BPM、CRM、WMS、TMS、MIS等业务管理系统及后台系统。祝各位早日登上人生巅峰!
C#.NET开发的MIS打印程序,各种网格如DataGrid打印、DataTable、HtmlTable等二维形式全搞定,源码免费下载
适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、医院管理系统、快递管理系统、教务管理系统等各类管理软件、支持大并发、SaaS应用。代码稳定、组件...
ExtAspNet开发的MIS系统框架,使用时先加载BIN文件夹里的文件,复制Web.config,运行环境.Net Framework 4.0
MIS金质打印通C#打印源码(普通下载)MIS金质打印通C#打印源码(普通下载)MIS金质打印通C#打印源码(普通下载)MIS金质打印通C#打印源码(普通下载)MIS金质打印通C#打印源码(普通下载)
ASP.NET 2.0 正式版中无刷新页面的开发(示例代码的补充) ASP.NET2.0中themes、Skins轻松实现网站换肤! ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题...
开源:C#.NET开发的MIS打印程序,各种网格如DataGrid打印、DataTable、HtmlTable等二维形式全搞定,源码免费下载 http://community.csdn.net/Expert/topic/3278/3278050.xml?temp=.5012934 2004年08月17日 1、...
MIS系统开发与应用(ASP.NET+SQL),内部有八个项目例子!
适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、物流管理系统、医院管理系统、快递管理系统、教务管理系统等各类管理软件、支持大并发、SaaS应用。代码稳定、组件...
教务平台之学籍管理模块是根据高校教务管理的实际需求,采用微软的.NET Framework 作为开发平台,使用SQL Server 来设计数据库,以ASP.NET和C#作为前台的开发语言,来完成学生学籍的管理。该设计是基于B/S模式的信息...
1、一套基于ASP.NET MVC+EF6+Bootstrap开发出来的框架,源代码完全开源,可以帮助你解决C#以及.NET项目68%的重复工作,让开发人员远离加班。 2、使用ApacheLicense2.0协议,采用主流框架,容易上手,简单易学,学习...
教务平台之学籍管理模块是根据高校教务管理的实际需求,采用微软的.NET Framework 作为开发平台,使用SQL Server 来设计数据库,以ASP.NET和C#作为前台的开发语言,来完成学生学籍的管理。该设计是基于B/S模式的信息...
讲述开源技术Struts_Spring_Hibernate在MIS开发中的应用研究.............
[CMS程序]MisCMS源码_mis8(ASP.NET源码).rar