莫相离 发表于 2015-1-16 22:48:22

ASP.NET编程:MIS开辟中.net Framework的打印功能

既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.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设置和检察打印效
  果这些办法一般是由菜单的单击触发的。
可怜的程序员,还是逃不出移植的命运!

老尸 发表于 2015-1-20 05:00:59

逐步缩小出错代码段的范围,最终确定错误代码的位置。

精灵巫婆 发表于 2015-1-27 19:25:27

有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。

冷月葬花魂 发表于 2015-2-5 09:15:32

asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源

乐观 发表于 2015-2-11 08:24:28

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

只想知道 发表于 2015-3-2 01:39:11

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。

蒙在股里 发表于 2015-3-11 01:42:02

可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。

小魔女 发表于 2015-3-17 18:09:31

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

愤怒的大鸟 发表于 2015-3-24 18:15:40

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
页: [1]
查看完整版本: ASP.NET编程:MIS开辟中.net Framework的打印功效