|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。打印 Microsoft.netFramework的打印功效都以组件的体例供应,为程序员供应了很年夜的便利,可是这几个组件的利用仍是很庞大的,有需要注释一下。
打印操纵一般包含以下四个功效
1打印设置设置打印机的一些参数好比变动打印机驱动程序等
2页面设置设置页面巨细纸张范例等
3打印预览相似于word中的打印预览
4打印
完成打印功效的中心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了以后的打印设置页面设置和所
有的与打印有关的事务和办法
这个类包含以下几个属性事务和办法
1、PrinterSettings属性
寄存打印机的设相信息这个属性不必要程序员设置由于它是由打印对话框猎取的
2、PrintCountroller属性
把持打印历程
3、DefaultPageSettings属性
寄存页面设相信息打印纸巨细偏向等也不必要程序员设置由于它是由页面设置对话框猎取的
4、DocumentName属性
指定文档称号,呈现在打印机形态窗口中
1、BeginPrint事务
在打印之前收回
2.PrintPage事务
每打印一页是收回,事务承受一个PrintPageEventArgs参数该参数封装了打印相干的信息
PrintPageEventArgs参数有良多主要的属性
1Cancel作废打印
2Graphics页面的画图工具
3HasMorePages是不是另有要打印的页面
Print办法该办法没有参数挪用它将依照以后设置入手下手打印
若完成打印功效起首机关PrintDocument工具增加打印事务
<P> 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是这个打印办法外的类的成员它能够纪录以后读取的地位
<P> if(line!=null)
e.HasMorePages=true;
else
e.HasMorePages=false;
}
打印设置,机关打印对话框将对话框中设置的Document属性赋给printDocument如许会将用户的设置主动保留到printDocument
的PrinterSettings属性中
<P> protectedvoidFileMenuItem_PrintSet_Click(objectsender,EventArgse)
{
PrintDialogprintDialog=newPrintDialog();
printDialog.Document=printDocument;
printDialog.ShowDialog();
}
页面设置和打印预览与打印设置道理不异都是机关对话框将用户在对话框中的设置保留到响应的类的属性中
<P> protectedvoidFileMenuItem_PageSet_Click(objectsender,EventArgse)
{
PageSetupDialogpageSetupDialog=newPageSetupDialog();
pageSetupDialog.Document=printDocument;
pageSetupDialog.ShowDialog();
}
打印预览
<P> 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()办法由于用户大概在打印之前还要再变动打印设置以是
在这里再次显现打印设置对话框
<P> 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办法完成打印功效
在这两头大概要用到PrintDialogPrintPreviewDialogPageSetupDialog设置和检察打印效
果这些办法一般是由菜单的单击触发的。
可怜的程序员,还是逃不出移植的命运! |
|