关于C#打印技术

关键字: 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事件来实现的打印的,我们可以通过来利用此事件函数来打印我们想要的结果

转载于:https://www.cnblogs.com/Nina-piaoye/archive/2013/04/03/2998303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值