您的位置:首页 > 其它

Winform的技巧琐碎总结----简单打印功能实现

2012-03-30 12:59 387 查看
一、C#实现打印功能操作通常包括以下四个功能。
1、打印设置 设置打印机的一些参数比如更改打印机驱动程序等。
2、页面设置 设置页面大小纸张类型等。
3、打印预览 类似于word中的打印预览。
4、打印。下面就向你具体介绍操作的步骤。
二、实现打印功能的步骤
第一步:(添加事件):若实现打印功能首先构造PrintDocument对象添加打印事件:
PrintDocument printDocument;
private void InitializeComponent()
{
printDocument=new PrintDocument();
printDocument.PrintPage += new PrintPageEventHandler (this.printDocument_PrintPage);
}
第二步:实现第一步的的事件委托方法(printDocument_PrintPage)
实现此方法过程中用到了StringReader类,必须先定义,private StringReader LineReader = null; //字符串流对象,一行一行读取文本
private void printDocument1_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.richTextBox1.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++;
}
if (line != null)
e.HasMorePages = true;
else
e.HasMorePages = false;
}
第三步:打印设置功能的实现
打印设置,构造打印对话框,将对话框中设置的Document属性赋给printDocument这样会将用户的设置自动保存到printDocument的PrinterSettings属性中
protectedvoid FileMenuItem_PrintSet_Click( object sender,EventArgs e)
{
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument;
printDialog.ShowDialog();
}
第四步:打印预览功能实现
此功能和打印设置原理相同,调出printPreviewDialog对话框即可,但值得注意的是必须实例化StringReader对象,lineReader = new StringReader(textBox.Text)。

protected void FileMenuItem_PrintView_Click( object sender,EventArgs e)
{
PrintPreviewDialog printPreviewDialog = new PrintPreviewDialog();
printPreviewDialog.Document = printDocument;
lineReader = new StringReader(textBox.Text);
try
{
printPreviewDialog.ShowDialog();
}
catch(Exception excep)
{
MessageBox.Show(excep.Message,"打印预览出错", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
第五步:就是打印功能的实现,和打印预览注意的地方一样注意实例化StringReader对象
protected void FileMenuItem_Print_Click(object sender,EventArgs e)
{
PrintDialog printDialog = new PrintDialog();
printDialog.Document = printDocument;
lineReader = new StringReader(textBox.Text);
if (printDialog.ShowDialog() == DialogResult.O
{
try
{
printDocument.Print();
}
atch(Exception excep)
{
MessageBox.Show(excep.Message, "打印出错",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
printDocument.PrintController.OnEndPrint(new PrintEventArgs());
}
}
}

注:文中的代码大部分引用互联网上的,本人仅作了总结归纳。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: