- 58
- 0
- 约3.7千字
- 约 4页
- 2022-06-26 发布于上海
- 举报
用 C#实现完整文档打印功能
在 windows 应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework 的打
印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。
打印操作通常包括以下四个功能
打印设置 设置打印机的一些参数比如更改打印机驱动程序等
页面设置 设置页面大小纸张类型等
打印预览 类似于 word 中的打印预览
打印
下面我把我编写的记事本(全部源代码可以在 中下载)中用到的打印功能的代码进行解释希望能给大家一些帮助
实现打印功能的核心是 PrintDocument 类这个类属于 System.Drawing.Printing
名字空间这个类封装了当前的打印设置页面设置以及所有的与打印有关的事件和方法
这个类包括以下几个属性 事件 和方法
1、PrinterSettings 属性
存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的
2、PrintCountroller 属性控制打印过程
3、DefaultPageSettings 属性
存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的
4、DocumentName 属性
指定文档名称,出现在打印机状态窗口中
1。 BeginPrint 事件在打印之前发出
PrintPage 事件
每打印一页是发出,事件接受一个 PrintPageEventArgs 参数该参数封装了打印相关的信息
PrintPageEventArgs 参数有很多重要的属性
Cancel 取消打印
Graphics 页面的绘图对象
HasMorePages 是否还有要打印的页面
Print 方法 该方法没有参数 调用它将按照当前设置开始打印若实现打印功能首先构造 PrintDocument 对象添加打印事件PrintDocument printDocument;
private void InitializeComponent()
{
...
printDocument=new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
...
}
实现打印事件功能
打印和绘图类似都是调用 Graphics 类的方法进行画图 不同的是一个在显示器上一个在打印纸上并且打印要进行一些复杂的计算
如换行 分页等。
private void printDocument_PrintPage(object sender,PrintPageEventArgs e)
{
Graphics g = e.Graphics; //获得绘图对象float linesPerPage = 0; //页面的行号
float yPosition = 0; //绘制字符串的纵向位置int count = 0; //行计数器
float leftMargin = e.MarginBounds.Left; //左边距float topMargin = e.MarginBounds.Top; //上边距string line = null; 行字符串
Font printFont = this.textBox.Font; //当前的打印字体SolidBrush myBrush = new SolidBrush(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, new
StringFormat());
count++;
}
如果本页打印完成而 line 不为空说明还有没完成的页面这将触发下一次的打印事件在下一次的打印中 lineReader 会
自动读取上次没有打印完的内容因为 lineReader 是这个打印方法外的类的成员它可以记录当前读取的位置
if(line != null)
e.HasMorePages = true;
else
}
e.HasMorePages = false;
打印
原创力文档

文档评论(0)