您的位置:首页 > 编程语言 > C#

C#打印技术(一)

2015-10-15 23:42 585 查看
首先,从原理上解释一下关于使用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), newPointF((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), newPointF((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), newPointF((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), newPointF((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事件来实现的打印的,我们可以通过来利用此事件函数来打印我们想要的结果.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# 打印