Microsoft .net Framework的打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的使用还是很复杂的,有必要解释一下。
\n
打印操作通常包括以下四个功能
\n
1 打印设置 设置打印机的一些参数比如更改打印机驱动程序等
\n
2 页面设置 设置页面大小纸张类型等
\n
3 打印预览 类似于word中的打印预览
\n
4 打印
\n
实现打印功能的核心是PrintDocument类这个类属于System.Drawing.Printing名字空间这个类封装了当前的打印设置页面设置以及所
\n
有的与打印有关的事件和方法
\n
这个类包括以下几个属性 事件 和方法
\n
1、PrinterSettings 属性
\n
存放打印机的设置信息这个属性不需要程序员设置因为它是由打印对话框获取的
\n
2、PrintCountroller 属性
\n
控制打印过程
\n
3、DefaultPageSettings 属性
\n
存放页面设置信息 打印纸大小方向等也不需要程序员设置因为它是由页面设置对话框获取的
\n
4、DocumentName 属性
\n
指定文档名称,出现在打印机状态窗口中
\n
1、BeginPrint事件
\n
在打印之前发出
\n
2. PrintPage事件
\n
每打印一页是发出,事件接受一个PrintPageEventArgs参数该参数封装了打印相关的信息
\n
PrintPageEventArgs参数有很多重要的属性
\n
1 Cancel 取消打印
\n
2 Graphics 页面的绘图对象
\n
3 HasMorePages 是否还有要打印的页面
\n
Print 方法 该方法没有参数 调用它将按照当前设置开始打印
\n
若实现打印功能首先构造PrintDocument对象添加打印事件
\n
\n
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++;
}\n
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++;
}\n