关键字:
C# .NET C#
打印
打印技术
内容摘要:
从原理上解释一下采用
C#
打印的应用,这里以最常用的
C/S
模式作为范例,首先,获取要打印的数据,根据固定的模版进行数据排版。然后,简单设置打印属性以及预览数据。最后,进行打印。
首先,从原理上解释一下关于使用
C#
开发打印的应用。这里以最常用的
C/S
模式作为范例。
.NetFrameWork
为打印提供了
System.Drawing
;
、
System.Drawing.Printing;
和
System.Windows.Froms;
命名空间,在这个命名空间里面有以下几个常用的重要类分别是
:
a)
PrintDocment
类主要用来绘制打印页面并将打印页面发送到打印机;
1)
常用属性:
l
DefaultPageSettings:
获取或设置页设置,这些页设置用作要打印的所有页的默认设置。
l
DocumentName:
获取或设置打印文档时要显示的文档名。
l
PrinterSettings:
获取或设置对文档进行打印的打印机。
2)
常用方法:
l
Print():
开始文档的打印进程。
l
OnPrintPage():
引发
PrintPage
事件。该事件在某页打印之前被调用。
3)
常用事件
l
BeginPrint:
在调用
Print
方法时并且在打印文档的第一页之前发生。
l
EndPrint:
打印完文档的最后一页时发生。
l
PrintPage:
当需要为当前页打印的输出时发生。
b)
PageSetupDialog
类用于设置简单的打印设置
1)
常用属性
l
AllowMargins:
获取或设置一个值,该值指示是否启用对话框的边距部分。
l
AllowOrientation:
获取或设置一个值,该值指示是否启用对话框的方向部分(横向对纵向)。
l
AllowPaper:
获取或设置一个值,该值指示是否启用对话框的纸张部分(纸张大小和纸张来源)。
l
AllowPrinter:
获取或设置一个值,该值指示是否启用“打印机”按钮。
l
Document:
获取或设置一个值,指示从中获取页面设置的 PrintDocument。
l
PageSettings:
获取或设置一个值,该值指示要修改的页设置。
l
PrinterSettings:
获取或设置用户单击对话框中“打印机”按钮时修改的打印机设置。
l
ShowHelp:
获取或设置一个值,该值指示“帮助”按钮是否可见。
l
ShowNetwork:
获取或设置一个值,该值指示“网络”按钮是否可见。
2)
常用方法
l
Reset():
已重写。 将所有选项重新设置为其默认值。
l
ShowDialog():
已重载。 运行通用对话框。
c)
PrintPreviewDialog
类用于打印预览
1)
常用属性
l
DesktopBounds:
获取或设置
Windows
桌面上窗体的大小和位置。
(从
Form
继承。)
l
DesktopLocation:
获取或设置
Windows
桌面上窗体的位置。
(从
Form
继承。)
l
DialogResult:
获取或设置窗体的对话框结果。
l
Document:
获取或设置要预览的文档。
l
Enabled:
获取或设置一个值,该值指示是否已启用该控件。
l
Height:
获取或设置控件的高度。
l
Location:
获取或设置该控件的左上角相对于其容器的左上角的坐标。
l
Width:
获取或设置控件的宽度。
(从
Control
继承。)
l
WindowState:
获取或设置窗体的窗口状态。
2)
常用方法
l
ShowDialog():
已重载。
将窗体显示为模式对话框。
下面我们来看一下打印的基本步骤:
1)
声明一个
PrintDocment:
命名空间:
System.Drawing.Printing;
代码:
PrintDocment objPrintDocment=new PrintDocment();
objPrintDocment
.PrintPage+=new PrintPageEventHandler
(Print_PrintPage);
2)
调用打印属性设置窗口
命名空间:
System.Windows.Froms;
代码:
//
初始化要显示的设置窗口
PageSetupDialog
objPageSetupDialog = new PageSetupDialog();
//
获取文档
objPageSetupDialog.Document = this._pDocument;
//
显示窗口s
objPageSetupDialog.ShowDialog();
3)
调用打印预览窗口
//
初始化要预览窗口
PrintPreviewDialog
objPrintPreviewDialog = newPrintPreviewDialog();
//
获取要预览的文档
objPrintPreviewDialog.Document = objDocument;
//
显示预览窗口
objPrintPreviewDialog.ShowDialog();
4)
添加
Print_PrintPage(object sender, PrintPageEventArgs e)
的代码
//
这里主要实现打印功能
利用Graphics类的
DrawLine
()方法画线,DrawString()方法写入文本;
//
打印表里的数据
g.DrawString(cellValue, _contentFont, _contentForeColor, new PointF(linex, liney + _cellTopMargin));
//
标题下面的一条线
g.DrawLine(_linePen, new PointF(_leftMargin, lineBeginY), new PointF(pageWidth - _rightMargin, lineBeginY));
现面来看一下一个具体的、简单的事例:将用户输入的数据在界面上打印出来.
public
partial class FTest : Form
{
PrintDocument objDocument;
public FTest ()
{
InitializeComponent();
}
private void FTest _Load(object sender, EventArgs e)
{
objDocument = new PrintDocument();
//
当需要为当前页打印的输出时发生
objDocument.PrintPage += new PrintPageEventHandler(objDocument_PrintPage);
}
void objDocument_PrintPage(object sender, PrintPageEventArgs e)
{
string objString = this.textBox1.Text;
//
获取用于绘制页面的Graphics的对象
Graphics g= e.Graphics;
//
向页面输出一行文字
g.DrawString(objString, new Font("
宋体"
, 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("
宋体"
, 24)).Width) / 2, e.PageBounds.Height / 8));
g.DrawString(objString, new Font("
宋体"
, 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("
宋体"
, 24)).Width) / 2, e.PageBounds.Height / 8+48));
g.DrawString(objString, new Font("
宋体"
, 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("
宋体"
, 24)).Width) / 2, e.PageBounds.Height / 8 + 96));
g.DrawString(objString, new Font("
宋体"
, 24), new SolidBrush(Color.Black), new PointF((e.PageBounds.Width - g.MeasureString(this.textBox1.Text, new Font("
宋体"
, 24)).Width) / 2, e.PageBounds.Height / 8 + 144));
g.Dispose();
}
private void button1_Click(object sender, EventArgs e)
{
//
初始化要显示的设置窗口
PageSetupDialog objPageSetupDialog = new PageSetupDialog();
//
获取文档
objPageSetupDialog.Document = this.objDocument;
//
显示窗口
objPageSetupDialog.ShowDialog();
//
初始化要预览窗口
PrintPreviewDialog
objPrintPreviewDialog = new PrintPreviewDialog();
//
获取要预览的文档
objPrintPreviewDialog.Document = objDocument;
objPrintPreviewDialog.Width = 800;
objPrintPreviewDialog.Height = 600;
//
显示预览窗口
objPrintPreviewDialog.ShowDialog();
}
}
总结:通过上面的事例我们可以知道C#主要使用其自带的类库PrintDocment类的PrintPage事件来实现的打印的,我们可以通过来利用此事件函数来打印我们想要的结果