c#endread怎么打印出来_c#教程之打印和打印预览

4.1      打印和打印预览

打印和打印预览是一个编辑器必须具有的功能,本节介绍实现打印和打印预览的方法。一般要实现如下菜单项:打印、打印预览、页面设置。

4.8.1PrintDocument类

PrintDocument组件是用于完成打印的类,其常用属性、方法和事件如下:

l  属性DocumentName:字符串类型,记录打印文档时显示的文档名(例如,在打印状态对话框或打印机队列中显示)。

l  方法Print:开始文档的打印。

l  事件BeginPrint:在调用Print方法后,在打印文档的第一页之前发生。

l  事件PrintPage:需要打印新的一页时发生。

l  事件EndPrint:在文档的最后一页打印后发生。

若要打印,首先创建PrintDocument组件的对象。然后使用页面设置对话框PageSetupDialog设置页面打印方式,这些设置作为要打印的所有页的默认设置。使用打印对话框PrintDialog设置对文档进行打印的打印机的参数。在打开两个对话框前,首先设置对话框的属性Document为指定的PrintDocument类对象,修改的设置将保存到PrintDocument组件对象中。第三步是调用PrintDocument.Print方法来实际打印文档。当调用该方法后,引发下列事件:BeginPrint、PrintPage、EndPrint。其中每打印一页都引发PrintPage事件,打印多页,要多次引发PrintPage事件。完成一次打印,可以引发一个或多个PrintPage事件。

程序员应为这3个事件编写事件处理函数。BeginPrint事件处理函数进行打印初始化,一般设置在打印时所有页的相同属性或共用的资源,例如所有页共同使用的字体、建立要打印的文件流等。PrintPage事件处理函数负责打印一页数据。EndPrint事件处理函数进行打印善后工作。这些处理函数的第2个参数System.Drawing.Printing.PrintEventArgs e提供了一些附加信息,主要有:

l e.Cancel:布尔变量,设置为true,将取消这次打印作业。

l e.Graphics:所使用的打印机的设备环境,参见第五章。

l e.HasMorePages:布尔变量。PrintPage事件处理函数打印一页后,仍有数据未打印,退出事件处理函数前设置HasMorePages=true,退出PrintPage事件处理函数后,将再次引发PrintPage事件,打印下一页。

l e.MarginBounds:打印区域的大小,是Rectangle结构,元素包括左上角坐标:Left和Top,宽和高:Width和Height。单位为1/100英寸。

l e.MarginBounds:打印纸的大小,是Rectangle结构。单位为1/100英寸。

l e.PageSettings:PageSettings类对象,包含用对话框PageSetupDialog设置的页面打印方式的全部信息。可用帮助查看PageSettings类的属性。

下边为这3个事件编写事件处理函数,具体步骤如下:

(1)    在最后一个using语句之后增加语句:

using System.IO;

using System.Drawing.Printing;

(2)    本例打印或预览RichTextBox中的内容,增加变量:StringReader streamToPrint=null。如果打印或预览文件,改为:StreamReader streamToPrint,流的概念参见第六章。增加打印使用的字体的变量:Font printFont。

(3)    放PrintDocument控件到窗体,属性name为printDocument1。

(4)    为printDocument1增加BeginPrint事件处理函数如下:

private void printDocument1_BeginPrint(object sender,

System.Drawing.Printing.PrintEventArgs e)

{   printFont=richTextBox1.Font;//打印使用的字体

streamToPrint=new StringReader(richTextBox1.Text);//打印richTextBox1.Text

}//如预览文件改为:streamToPrint=new StreamReader("文件的路径及文件名");

(5)    printDocument1的PrintPage事件处理函数如下。streamToPrint.ReadLine()读入一段数据,可能打印多行。本事件处理函数将此段数据打印在一行上,因此方法必须改进。

private void printDocument1_PrintPage(object sender,

System.Drawing.Printing.PrintPageEventArgs e)

{   float linesPerPage=0;//记录每页最大行数

float yPos=0;//记录将要打印的一行数据在垂直方向的位置

int count=0;//记录每页已打印行数

float leftMargin=e.MarginBounds.Left;//左边距

float topMargin=e.MarginBounds.Top;//顶边距

string line=null;//从RichTextBox中读取一段字符将存到line中

//每页最大行数=一页纸打印区域的高度/一行字符的高度

linesPerPage=e.MarginBounds.Height/printFont.GetHeight(e.Graphics);

//如果当前页已打印行数小于每页最大行数而且读出数据不为null,继续打印

while(count

{   //yPos为要打印的当前行在垂直方向上的位置

yPos=topMargin+(count*printFont.GetHeight(e.Graphics));

e.Graphics.DrawString(line,printFont,Brushes.Black,

leftMargin,yPos,new StringFormat());//打印,参见第五章

count++;//已打印行数加1

}

if(line!=null)//是否需要打印下一页

e.HasMorePages=true;//需要打印下一页

else

e.HasMorePages=false;//不需要打印下一页

}

(6)    为printDocument1增加EndPrint事件处理函数如下:

private void printDocument1_EndPrint (object sender,

System.Drawing.Printing.PrintEventArgs e)

{   if(streamToPrint!=null)

streamToPrint.Close();//释放不用的资源

}

4.8.2打印设置对话框控件PageSetupDialog

Windows窗体的PageSetupDialog控件是一个页面设置对话框,用于在Windows应用程序中设置打印页面的详细信息,对话框的外观如图4.8.2。

图4.8.2

用户使用此对话框能够设置纸张大小(类型)、纸张来源、纵向与横向打印、上下左右的页边距等。在打开对话框前,首先设置其属性Document为指定的PrintDocument类对象,用来把页面设置保存到PrintDocument类对象中。为文本编辑器增加页面设置功能的具体步骤如下:

(7)    为文件顶级菜单项的弹出菜单增加菜单项:页面设置。

(8)    放PageSetupDialog控件到窗体,属性name为pageSetupDialog1。

(9)    为页面设置菜单项增加单击事件处理函数如下:

private void menuItem5_Click(object sender,System.EventArgs e)

{   pageSetupDialog1.Document=printDocument1;

pageSetupDialog1.ShowDialog();

}

(10)打开对话框pageSetupDialog1后,如果单击了确定按钮,PageSetupDialog对话框中所做的的页面设置被保存到PrintDocument类对象printDocument1中,如果单击了取消按钮,不保存这些修改,维持原来的值。当调用PrintDocument.Print方法来实际打印文档时,引发PrintPage事件,该事件处理函数的第二个参数e提供了这些设置信息。

4.8.3打印预览

用PrintPreviewDialog类可以在屏幕上显示PrintDocument的打印效果,既打印预览。实现打印预览的具体步骤如下:

(11)为文件顶级菜单项的弹出菜单增加菜单项:打印预览。

(12)放PrintPreviewDialog控件到窗体,属性name为printPreviewDialog1。

(13)为打印预览菜单项增加单击事件处理函数如下:

private void menuItemPrintView_Click(object sender,System.EventArgs e)

{   printPreviewDialog1.Document=printDocument1;

printPreviewDialog1.ShowDialog();

}

(14)编译,运行,输入若干字符,试验一下预览的效果,预览的效果如图4.8.3。

图4.8.3

4.8.4用打印对话框PrintDialog实现打印

PrintDialog组件是类库中预先定义的对话框,用来设置对文档进行打印的打印机的参数,包括打印机名称、要打印的页(全部打印或指定页的范围)、打印的份数以及是否打印到文件等。在打开对话框前,首先设置其属性Document为指定的PrintDocument类对象,打开PrintDialog对话框后,修改的设置将保存到PrintDocument类的对象中。PrintDialog对话框的外观如图4.8.4。

图4.8.4

增加打印功能的具体步骤如下:

(15)放PrintDialog控件到窗体属性Name=printDialog1。

(16)为文件顶级菜单项的弹出菜单增加菜单项:打印。

(17)为打印菜单项增加单击事件处理函数如下:(不能打印?)

private void menuItemPrint_Click(object sender, System.EventArgs e)

{   printDialog1.Document=printDocument1;

if(printDialog1.ShowDialog(this)==DialogResult.OK)

printDocument1.Print();

}

(18)编译,运行,输入若干字符,试验一下打印效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值