C#打印技术(一)

淡淡的烟草味﹌ 2022-08-09 06:56 158阅读 0赞

首先,从原理上解释一下关于使用 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事件来实现的打印的,我们可以通过来利用此事件函数来打印我们想要的结果.

发表评论

表情:
评论列表 (有 0 条评论,158人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C# 打印必备

    1.打印纸张设置、像素转毫米、像素转英寸、毫米转英寸 2.像素转换是使用的 DPI 获取方式,这里提供三种方法 3.下面有两个文件,一个 form 窗体文件,一个是转换的公

    相关 C#打印技术(二)

    连续2天了,捣鼓虚拟打印和C\打印技术,我自己去MSDN上了解了关于C\打印的知识。我还不熟悉,就参考别人的代码了。![大笑][laugh.gif] \----------